@convex-dev/agent 0.6.3 → 0.7.0-alpha.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.
- package/MIGRATION.md +60 -116
- package/dist/client/messages.d.ts +1 -398
- package/dist/client/messages.d.ts.map +1 -1
- package/dist/client/messages.js +3 -47
- package/dist/client/messages.js.map +1 -1
- package/dist/client/types.d.ts +1 -455
- package/dist/client/types.d.ts.map +1 -1
- package/dist/component/_generated/component.d.ts +805 -45
- package/dist/component/_generated/component.d.ts.map +1 -1
- package/dist/component/apiKeys.js +5 -5
- package/dist/component/apiKeys.js.map +1 -1
- package/dist/component/files.d.ts.map +1 -1
- package/dist/component/files.js +13 -11
- package/dist/component/files.js.map +1 -1
- package/dist/component/messages.d.ts +1252 -201
- package/dist/component/messages.d.ts.map +1 -1
- package/dist/component/messages.js +83 -47
- package/dist/component/messages.js.map +1 -1
- package/dist/component/schema.d.ts +2593 -332
- package/dist/component/schema.d.ts.map +1 -1
- package/dist/component/streams.d.ts +7 -1
- package/dist/component/streams.d.ts.map +1 -1
- package/dist/component/streams.js +46 -47
- package/dist/component/streams.js.map +1 -1
- package/dist/component/threads.d.ts.map +1 -1
- package/dist/component/threads.js +8 -9
- package/dist/component/threads.js.map +1 -1
- package/dist/component/users.js +2 -2
- package/dist/component/users.js.map +1 -1
- package/dist/component/vector/index.d.ts.map +1 -1
- package/dist/component/vector/index.js +14 -8
- package/dist/component/vector/index.js.map +1 -1
- package/dist/react/index.d.ts +5 -5
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +5 -5
- package/dist/react/index.js.map +1 -1
- package/dist/shared.d.ts +19 -7
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +4 -4
- package/dist/shared.js.map +1 -1
- package/dist/streaming/materializePersistedUIMessageChunks.d.ts +16 -0
- package/dist/streaming/materializePersistedUIMessageChunks.d.ts.map +1 -0
- package/dist/streaming/materializePersistedUIMessageChunks.js +302 -0
- package/dist/streaming/materializePersistedUIMessageChunks.js.map +1 -0
- package/dist/streaming/persistedUIMessageChunks.d.ts +106 -0
- package/dist/streaming/persistedUIMessageChunks.d.ts.map +1 -0
- package/dist/streaming/persistedUIMessageChunks.js +475 -0
- package/dist/streaming/persistedUIMessageChunks.js.map +1 -0
- package/dist/validators.d.ts +10026 -1055
- package/dist/validators.d.ts.map +1 -1
- package/dist/validators.js +71 -9
- package/dist/validators.js.map +1 -1
- package/dist/{UIMessages.d.ts → vercel/UIMessages.d.ts} +1 -1
- package/dist/vercel/UIMessages.d.ts.map +1 -0
- package/dist/{UIMessages.js → vercel/UIMessages.js} +63 -1
- package/dist/vercel/UIMessages.js.map +1 -0
- package/dist/{client → vercel/client}/createTool.d.ts +23 -16
- package/dist/vercel/client/createTool.d.ts.map +1 -0
- package/dist/{client → vercel/client}/createTool.js +2 -0
- package/dist/vercel/client/createTool.js.map +1 -0
- package/dist/{client → vercel/client}/definePlaygroundAPI.d.ts +593 -134
- package/dist/{client → vercel/client}/definePlaygroundAPI.d.ts.map +1 -1
- package/dist/{client → vercel/client}/definePlaygroundAPI.js +13 -9
- package/dist/vercel/client/definePlaygroundAPI.js.map +1 -0
- package/dist/{client → vercel/client}/files.d.ts +2 -2
- package/dist/vercel/client/files.d.ts.map +1 -0
- package/dist/vercel/client/files.js.map +1 -0
- package/dist/vercel/client/messages.d.ts +542 -0
- package/dist/vercel/client/messages.d.ts.map +1 -0
- package/dist/vercel/client/messages.js +66 -0
- package/dist/vercel/client/messages.js.map +1 -0
- package/dist/{client → vercel/client}/mockModel.d.ts +17 -17
- package/dist/vercel/client/mockModel.d.ts.map +1 -0
- package/dist/{client → vercel/client}/mockModel.js +12 -13
- package/dist/vercel/client/mockModel.js.map +1 -0
- package/dist/{client → vercel/client}/saveInputMessages.d.ts +2 -2
- package/dist/vercel/client/saveInputMessages.d.ts.map +1 -0
- package/dist/vercel/client/saveInputMessages.js.map +1 -0
- package/dist/{client → vercel/client}/search.d.ts +119 -22
- package/dist/vercel/client/search.d.ts.map +1 -0
- package/dist/{client → vercel/client}/search.js +2 -2
- package/dist/vercel/client/search.js.map +1 -0
- package/dist/{client → vercel/client}/start.d.ts +26 -11
- package/dist/vercel/client/start.d.ts.map +1 -0
- package/dist/{client → vercel/client}/start.js +64 -22
- package/dist/vercel/client/start.js.map +1 -0
- package/dist/{client → vercel/client}/streamText.d.ts +13 -12
- package/dist/vercel/client/streamText.d.ts.map +1 -0
- package/dist/{client → vercel/client}/streamText.js +43 -9
- package/dist/vercel/client/streamText.js.map +1 -0
- package/dist/{client → vercel/client}/streaming.d.ts +1410 -183
- package/dist/vercel/client/streaming.d.ts.map +1 -0
- package/dist/{client → vercel/client}/streaming.js +120 -52
- package/dist/vercel/client/streaming.js.map +1 -0
- package/dist/vercel/client/types.d.ts +456 -0
- package/dist/vercel/client/types.d.ts.map +1 -0
- package/dist/vercel/client/types.js +3 -0
- package/dist/vercel/client/types.js.map +1 -0
- package/dist/{client → vercel/client}/utils.d.ts +3 -2
- package/dist/vercel/client/utils.d.ts.map +1 -0
- package/dist/{client → vercel/client}/utils.js +2 -2
- package/dist/vercel/client/utils.js.map +1 -0
- package/dist/vercel/deltas.d.ts +31 -0
- package/dist/vercel/deltas.d.ts.map +1 -0
- package/dist/vercel/deltas.js +525 -0
- package/dist/vercel/deltas.js.map +1 -0
- package/dist/{client → vercel}/index.d.ts +484 -97
- package/dist/vercel/index.d.ts.map +1 -0
- package/dist/{client → vercel}/index.js +65 -38
- package/dist/vercel/index.js.map +1 -0
- package/dist/{mapping.d.ts → vercel/mapping.d.ts} +5 -13
- package/dist/vercel/mapping.d.ts.map +1 -0
- package/dist/{mapping.js → vercel/mapping.js} +411 -112
- package/dist/vercel/mapping.js.map +1 -0
- package/dist/{react → vercel/react}/optimisticallySendMessage.d.ts +2 -2
- package/dist/vercel/react/optimisticallySendMessage.d.ts.map +1 -0
- package/dist/vercel/react/optimisticallySendMessage.js.map +1 -0
- package/dist/{react → vercel/react}/types.d.ts +1 -1
- package/dist/vercel/react/types.d.ts.map +1 -0
- package/dist/{react → vercel/react}/types.js.map +1 -1
- package/dist/{react → vercel/react}/useDeltaStreams.d.ts +1 -1
- package/dist/vercel/react/useDeltaStreams.d.ts.map +1 -0
- package/dist/{react → vercel/react}/useDeltaStreams.js +1 -1
- package/dist/vercel/react/useDeltaStreams.js.map +1 -0
- package/dist/{react → vercel/react}/useStreamingUIMessages.d.ts +1 -1
- package/dist/vercel/react/useStreamingUIMessages.d.ts.map +1 -0
- package/dist/vercel/react/useStreamingUIMessages.js +112 -0
- package/dist/vercel/react/useStreamingUIMessages.js.map +1 -0
- package/dist/{react → vercel/react}/useThreadMessages.d.ts +1 -1
- package/dist/vercel/react/useThreadMessages.d.ts.map +1 -0
- package/dist/{react → vercel/react}/useThreadMessages.js +1 -1
- package/dist/vercel/react/useThreadMessages.js.map +1 -0
- package/dist/{react → vercel/react}/useUIMessages.d.ts +2 -1
- package/dist/vercel/react/useUIMessages.d.ts.map +1 -0
- package/dist/{react → vercel/react}/useUIMessages.js +8 -4
- package/dist/vercel/react/useUIMessages.js.map +1 -0
- package/package.json +30 -22
- package/src/client/messages.ts +5 -107
- package/src/client/types.ts +0 -621
- package/src/component/_generated/component.ts +1089 -48
- package/src/component/apiKeys.ts +5 -5
- package/src/component/files.test.ts +1 -1
- package/src/component/files.ts +14 -12
- package/src/component/messages.test.ts +273 -1
- package/src/component/messages.ts +99 -57
- package/src/component/streams.ts +80 -64
- package/src/component/threads.ts +12 -9
- package/src/component/users.ts +2 -2
- package/src/component/vector/index.ts +14 -7
- package/src/eslintConfig.test.ts +44 -0
- package/src/react/index.ts +8 -5
- package/src/shared.ts +26 -36
- package/src/streaming/materializePersistedUIMessageChunks.test.ts +513 -0
- package/src/streaming/materializePersistedUIMessageChunks.ts +398 -0
- package/src/streaming/persistedUIMessageChunks.test.ts +205 -0
- package/src/streaming/persistedUIMessageChunks.ts +658 -0
- package/src/validators.test.ts +4 -1
- package/src/validators.ts +89 -8
- package/src/{UIMessages.combineUIMessages.test.ts → vercel/UIMessages.combineUIMessages.test.ts} +4 -1
- package/src/{UIMessages.ts → vercel/UIMessages.ts} +96 -5
- package/src/{client → vercel/client}/approval.test.ts +48 -19
- package/src/{client → vercel/client}/createTool.ts +63 -23
- package/src/{client → vercel/client}/definePlaygroundAPI.ts +44 -29
- package/src/{client → vercel/client}/files.ts +2 -2
- package/src/{client → vercel/client}/index.test.ts +162 -3
- package/src/vercel/client/messages.ts +182 -0
- package/src/{client → vercel/client}/mockModel.ts +38 -39
- package/src/{client → vercel/client}/saveInputMessages.test.ts +1 -1
- package/src/{client → vercel/client}/saveInputMessages.ts +7 -4
- package/src/{client → vercel/client}/search.test.ts +3 -3
- package/src/{client → vercel/client}/search.ts +4 -4
- package/src/{client → vercel/client}/setup.test.ts +6 -3
- package/src/vercel/client/start.test.ts +14 -0
- package/src/{client → vercel/client}/start.ts +147 -36
- package/src/vercel/client/streamText.test.ts +223 -0
- package/src/{client → vercel/client}/streamText.ts +102 -31
- package/src/{client → vercel/client}/streaming.integration.test.ts +40 -115
- package/src/{client → vercel/client}/streaming.test.ts +178 -4
- package/src/{client → vercel/client}/streaming.ts +114 -52
- package/src/vercel/client/types.test.ts +13 -0
- package/src/vercel/client/types.ts +679 -0
- package/src/{client → vercel/client}/utils.ts +13 -7
- package/src/vercel/deltas.test.ts +898 -0
- package/src/vercel/deltas.ts +633 -0
- package/src/{fromUIMessages.test.ts → vercel/fromUIMessages.test.ts} +17 -1
- package/src/{client → vercel}/index.ts +169 -62
- package/src/vercel/mapping.test.ts +965 -0
- package/src/{mapping.ts → vercel/mapping.ts} +501 -131
- package/src/{react → vercel/react}/optimisticallySendMessage.ts +2 -2
- package/src/{react → vercel/react}/types.ts +1 -1
- package/src/{react → vercel/react}/useDeltaStreams.ts +6 -2
- package/src/{react → vercel/react}/useStreamingUIMessages.ts +67 -35
- package/src/{react → vercel/react}/useThreadMessages.ts +2 -2
- package/src/{react → vercel/react}/useUIMessages.test.ts +80 -1
- package/src/{react → vercel/react}/useUIMessages.ts +13 -5
- package/src/{toUIMessages.test.ts → vercel/toUIMessages.test.ts} +49 -2
- package/dist/UIMessages.d.ts.map +0 -1
- package/dist/UIMessages.js.map +0 -1
- package/dist/client/createTool.d.ts.map +0 -1
- package/dist/client/createTool.js.map +0 -1
- package/dist/client/definePlaygroundAPI.js.map +0 -1
- package/dist/client/files.d.ts.map +0 -1
- package/dist/client/files.js.map +0 -1
- package/dist/client/index.d.ts.map +0 -1
- package/dist/client/index.js.map +0 -1
- package/dist/client/mockModel.d.ts.map +0 -1
- package/dist/client/mockModel.js.map +0 -1
- package/dist/client/saveInputMessages.d.ts.map +0 -1
- package/dist/client/saveInputMessages.js.map +0 -1
- package/dist/client/search.d.ts.map +0 -1
- package/dist/client/search.js.map +0 -1
- package/dist/client/start.d.ts.map +0 -1
- package/dist/client/start.js.map +0 -1
- package/dist/client/streamText.d.ts.map +0 -1
- package/dist/client/streamText.js.map +0 -1
- package/dist/client/streaming.d.ts.map +0 -1
- package/dist/client/streaming.js.map +0 -1
- package/dist/client/utils.d.ts.map +0 -1
- package/dist/client/utils.js.map +0 -1
- package/dist/deltas.d.ts +0 -43
- package/dist/deltas.d.ts.map +0 -1
- package/dist/deltas.js +0 -446
- package/dist/deltas.js.map +0 -1
- package/dist/mapping.d.ts.map +0 -1
- package/dist/mapping.js.map +0 -1
- package/dist/react/optimisticallySendMessage.d.ts.map +0 -1
- package/dist/react/optimisticallySendMessage.js.map +0 -1
- package/dist/react/types.d.ts.map +0 -1
- package/dist/react/useDeltaStreams.d.ts.map +0 -1
- package/dist/react/useDeltaStreams.js.map +0 -1
- package/dist/react/useStreamingUIMessages.d.ts.map +0 -1
- package/dist/react/useStreamingUIMessages.js +0 -92
- package/dist/react/useStreamingUIMessages.js.map +0 -1
- package/dist/react/useThreadMessages.d.ts.map +0 -1
- package/dist/react/useThreadMessages.js.map +0 -1
- package/dist/react/useUIMessages.d.ts.map +0 -1
- package/dist/react/useUIMessages.js.map +0 -1
- package/src/client/streamText.test.ts +0 -102
- package/src/deltas.test.ts +0 -626
- package/src/deltas.ts +0 -569
- package/src/mapping.test.ts +0 -402
- /package/dist/{client → vercel/client}/files.js +0 -0
- /package/dist/{client → vercel/client}/saveInputMessages.js +0 -0
- /package/dist/{react → vercel/react}/optimisticallySendMessage.js +0 -0
- /package/dist/{react → vercel/react}/types.js +0 -0
- /package/src/{UIMessages.test.ts → vercel/UIMessages.test.ts} +0 -0
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
type StreamArgs,
|
|
18
18
|
type StreamDelta,
|
|
19
19
|
type StreamMessage,
|
|
20
|
-
} from "
|
|
20
|
+
} from "../../validators.js";
|
|
21
21
|
import type {
|
|
22
22
|
ActionCtx,
|
|
23
23
|
AgentComponent,
|
|
@@ -208,6 +208,7 @@ export class DeltaStreamer<T> {
|
|
|
208
208
|
#nextParts: T[] = [];
|
|
209
209
|
#latestWrite: number = 0;
|
|
210
210
|
#ongoingWrite: Promise<void> | undefined;
|
|
211
|
+
#abortPromise: Promise<void> | undefined;
|
|
211
212
|
#cursor: number = 0;
|
|
212
213
|
public abortController: AbortController;
|
|
213
214
|
// When true, the stream will be finished externally (e.g., atomically via addMessages)
|
|
@@ -243,34 +244,28 @@ export class DeltaStreamer<T> {
|
|
|
243
244
|
this.#nextParts = [];
|
|
244
245
|
this.abortController = new AbortController();
|
|
245
246
|
if (config.abortSignal) {
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
await this.ctx.runMutation(this.component.streams.abort, {
|
|
259
|
-
streamId: this.streamId,
|
|
260
|
-
reason: "abortSignal",
|
|
261
|
-
});
|
|
262
|
-
}
|
|
263
|
-
} catch {
|
|
264
|
-
// Best-effort cleanup — the stream will be garbage-collected
|
|
265
|
-
// by the 10-minute timeout if this fails.
|
|
266
|
-
}
|
|
267
|
-
});
|
|
247
|
+
const abortFromSignal = () => {
|
|
248
|
+
void this.#abort("abortSignal").catch(() => {
|
|
249
|
+
// Best-effort cleanup — the stream timeout is the fallback.
|
|
250
|
+
});
|
|
251
|
+
};
|
|
252
|
+
if (config.abortSignal.aborted) {
|
|
253
|
+
abortFromSignal();
|
|
254
|
+
} else {
|
|
255
|
+
config.abortSignal.addEventListener("abort", abortFromSignal, {
|
|
256
|
+
once: true,
|
|
257
|
+
});
|
|
258
|
+
}
|
|
268
259
|
}
|
|
269
260
|
}
|
|
270
261
|
|
|
271
262
|
// Avoid race conditions by only creating once
|
|
272
263
|
#creatingStreamIdPromise: Promise<string> | undefined;
|
|
273
264
|
public async getStreamId() {
|
|
265
|
+
if (this.abortController.signal.aborted) {
|
|
266
|
+
await this.#abortPromise;
|
|
267
|
+
throw new Error("Cannot create a stream after it has been aborted");
|
|
268
|
+
}
|
|
274
269
|
if (!this.streamId) {
|
|
275
270
|
if (!this.#creatingStreamIdPromise) {
|
|
276
271
|
this.#creatingStreamIdPromise = this.ctx.runMutation(
|
|
@@ -310,9 +305,11 @@ export class DeltaStreamer<T> {
|
|
|
310
305
|
}
|
|
311
306
|
// Skip finish if it will be handled externally (atomically with message save)
|
|
312
307
|
// or if the stream was aborted (e.g., due to a failed delta write).
|
|
313
|
-
//
|
|
314
|
-
//
|
|
315
|
-
if (
|
|
308
|
+
// Abort cleanup owns the terminal component transition, so consumeStream
|
|
309
|
+
// must wait for it instead of also trying to finish the stream.
|
|
310
|
+
if (this.abortController.signal.aborted) {
|
|
311
|
+
await this.#waitForAbortCleanup();
|
|
312
|
+
} else if (!this.#finishedExternally) {
|
|
316
313
|
await this.finish();
|
|
317
314
|
}
|
|
318
315
|
}
|
|
@@ -343,28 +340,27 @@ export class DeltaStreamer<T> {
|
|
|
343
340
|
return;
|
|
344
341
|
}
|
|
345
342
|
this.#latestWrite = Date.now();
|
|
343
|
+
let success: boolean;
|
|
346
344
|
try {
|
|
347
|
-
|
|
345
|
+
success = await this.ctx.runMutation(
|
|
348
346
|
this.component.streams.addDelta,
|
|
349
347
|
delta,
|
|
350
348
|
);
|
|
351
|
-
if (!success) {
|
|
352
|
-
// An in-flight #sendDelta started before markFinishedExternally()
|
|
353
|
-
// will get `success === false` because the stream row is already
|
|
354
|
-
// "finished". That's a benign late-write miss, not a failure —
|
|
355
|
-
// don't convert it into an abort.
|
|
356
|
-
if (this.#finishedExternally) {
|
|
357
|
-
return;
|
|
358
|
-
}
|
|
359
|
-
await this.config.onAsyncAbort("async abort");
|
|
360
|
-
this.abortController.abort();
|
|
361
|
-
return;
|
|
362
|
-
}
|
|
363
349
|
} catch (e) {
|
|
364
|
-
await this
|
|
350
|
+
await this.#abortDelta(
|
|
365
351
|
e instanceof Error ? e.message : "unknown error",
|
|
366
352
|
);
|
|
367
|
-
|
|
353
|
+
return;
|
|
354
|
+
}
|
|
355
|
+
if (!success) {
|
|
356
|
+
// An in-flight #sendDelta started before markFinishedExternally()
|
|
357
|
+
// will get `success === false` because the stream row is already
|
|
358
|
+
// "finished". That's a benign late-write miss, not a failure —
|
|
359
|
+
// don't convert it into an abort.
|
|
360
|
+
if (this.#finishedExternally) {
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
await this.#abortDelta("async abort");
|
|
368
364
|
return;
|
|
369
365
|
}
|
|
370
366
|
// Now that we've sent the delta, check if we need to send another one.
|
|
@@ -400,9 +396,17 @@ export class DeltaStreamer<T> {
|
|
|
400
396
|
if (!this.streamId) {
|
|
401
397
|
return;
|
|
402
398
|
}
|
|
403
|
-
|
|
399
|
+
try {
|
|
400
|
+
await this.#ongoingWrite;
|
|
401
|
+
} catch (error) {
|
|
402
|
+
if (this.abortController.signal.aborted) {
|
|
403
|
+
await this.#waitForAbortCleanup();
|
|
404
|
+
}
|
|
405
|
+
throw error;
|
|
406
|
+
}
|
|
404
407
|
await this.#sendDelta(); // #sendDelta checks aborted internally
|
|
405
408
|
if (this.abortController.signal.aborted) {
|
|
409
|
+
await this.#waitForAbortCleanup();
|
|
406
410
|
return;
|
|
407
411
|
}
|
|
408
412
|
await this.ctx.runMutation(this.component.streams.finish, {
|
|
@@ -411,18 +415,76 @@ export class DeltaStreamer<T> {
|
|
|
411
415
|
}
|
|
412
416
|
|
|
413
417
|
public async fail(reason: string) {
|
|
414
|
-
|
|
415
|
-
|
|
418
|
+
await this.#abort(reason);
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
async #abortDelta(reason: string) {
|
|
422
|
+
let callbackFailure: { error: unknown } | undefined;
|
|
423
|
+
try {
|
|
424
|
+
await this.config.onAsyncAbort(reason);
|
|
425
|
+
} catch (error) {
|
|
426
|
+
callbackFailure = { error };
|
|
416
427
|
}
|
|
417
|
-
this
|
|
418
|
-
|
|
419
|
-
|
|
428
|
+
if (!this.#abortPromise) {
|
|
429
|
+
try {
|
|
430
|
+
await this.#abort(reason, false);
|
|
431
|
+
} catch {
|
|
432
|
+
// The stream timeout is the bounded cleanup fallback.
|
|
433
|
+
}
|
|
420
434
|
}
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
435
|
+
if (callbackFailure) throw callbackFailure.error;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
#abort(reason: string, waitForOngoingWrite = true): Promise<void> {
|
|
439
|
+
if (!this.#abortPromise) {
|
|
440
|
+
this.abortController.abort();
|
|
441
|
+
this.#abortPromise = this.#abortCreatedStream(
|
|
442
|
+
reason,
|
|
443
|
+
waitForOngoingWrite,
|
|
444
|
+
);
|
|
445
|
+
}
|
|
446
|
+
return this.#abortPromise;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
async #waitForAbortCleanup() {
|
|
450
|
+
let writeFailure: { error: unknown } | undefined;
|
|
451
|
+
try {
|
|
452
|
+
await this.#ongoingWrite;
|
|
453
|
+
} catch (error) {
|
|
454
|
+
writeFailure = { error };
|
|
455
|
+
}
|
|
456
|
+
try {
|
|
457
|
+
await this.#abortPromise;
|
|
458
|
+
} catch (error) {
|
|
459
|
+
writeFailure ??= { error };
|
|
460
|
+
}
|
|
461
|
+
if (writeFailure) throw writeFailure.error;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
async #abortCreatedStream(reason: string, waitForOngoingWrite: boolean) {
|
|
465
|
+
if (this.#creatingStreamIdPromise) {
|
|
466
|
+
this.streamId ??= await this.#creatingStreamIdPromise;
|
|
467
|
+
}
|
|
468
|
+
if (!this.streamId) return;
|
|
469
|
+
let writeFailure: { error: unknown } | undefined;
|
|
470
|
+
if (waitForOngoingWrite) {
|
|
471
|
+
try {
|
|
472
|
+
await this.#ongoingWrite;
|
|
473
|
+
} catch (error) {
|
|
474
|
+
writeFailure = { error };
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
let abortFailure: { error: unknown } | undefined;
|
|
478
|
+
try {
|
|
479
|
+
await this.ctx.runMutation(this.component.streams.abort, {
|
|
480
|
+
streamId: this.streamId,
|
|
481
|
+
reason,
|
|
482
|
+
});
|
|
483
|
+
} catch (error) {
|
|
484
|
+
abortFailure = { error };
|
|
485
|
+
}
|
|
486
|
+
if (writeFailure) throw writeFailure.error;
|
|
487
|
+
if (abortFailure) throw abortFailure.error;
|
|
426
488
|
}
|
|
427
489
|
}
|
|
428
490
|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { LanguageModelV3, LanguageModelV4 } from "@ai-sdk/provider";
|
|
2
|
+
import { expectTypeOf, test } from "vitest";
|
|
3
|
+
import type { AgentPrompt, Config } from "./types.js";
|
|
4
|
+
|
|
5
|
+
expectTypeOf<{ languageModel: string }>().toExtend<Config>();
|
|
6
|
+
expectTypeOf<{ languageModel: LanguageModelV4 }>().toExtend<Config>();
|
|
7
|
+
expectTypeOf<{ languageModel: LanguageModelV3 }>().not.toExtend<Config>();
|
|
8
|
+
|
|
9
|
+
expectTypeOf<{ model: string }>().toExtend<AgentPrompt>();
|
|
10
|
+
expectTypeOf<{ model: LanguageModelV4 }>().toExtend<AgentPrompt>();
|
|
11
|
+
expectTypeOf<{ model: LanguageModelV3 }>().not.toExtend<AgentPrompt>();
|
|
12
|
+
|
|
13
|
+
test("noop", () => {});
|