@convex-dev/agent 0.1.14 → 0.1.15-alpha.1

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 (62) hide show
  1. package/dist/client/index.d.ts +496 -174
  2. package/dist/client/index.d.ts.map +1 -1
  3. package/dist/client/index.js +120 -165
  4. package/dist/client/index.js.map +1 -1
  5. package/dist/client/listMessages.d.ts +22 -0
  6. package/dist/client/listMessages.d.ts.map +1 -0
  7. package/dist/client/listMessages.js +25 -0
  8. package/dist/client/listMessages.js.map +1 -0
  9. package/dist/client/search.d.ts +162 -0
  10. package/dist/client/search.d.ts.map +1 -0
  11. package/dist/client/search.js +113 -0
  12. package/dist/client/search.js.map +1 -0
  13. package/dist/client/streaming.d.ts +17 -3
  14. package/dist/client/streaming.d.ts.map +1 -1
  15. package/dist/client/streaming.js +39 -1
  16. package/dist/client/streaming.js.map +1 -1
  17. package/dist/client/types.d.ts +5 -1
  18. package/dist/client/types.d.ts.map +1 -1
  19. package/dist/component/_generated/api.d.ts +14 -3
  20. package/dist/component/messages.d.ts +4 -4
  21. package/dist/component/messages.d.ts.map +1 -1
  22. package/dist/component/messages.js +12 -7
  23. package/dist/component/messages.js.map +1 -1
  24. package/dist/component/schema.d.ts +38 -28
  25. package/dist/component/schema.d.ts.map +1 -1
  26. package/dist/component/schema.js +3 -2
  27. package/dist/component/schema.js.map +1 -1
  28. package/dist/component/streams.d.ts +7 -0
  29. package/dist/component/streams.d.ts.map +1 -1
  30. package/dist/component/streams.js +49 -22
  31. package/dist/component/streams.js.map +1 -1
  32. package/dist/component/vector/index.js +3 -3
  33. package/dist/component/vector/index.js.map +1 -1
  34. package/dist/react/deltas.d.ts.map +1 -1
  35. package/dist/react/deltas.js +2 -2
  36. package/dist/react/deltas.js.map +1 -1
  37. package/dist/react/index.d.ts +4 -2
  38. package/dist/react/index.d.ts.map +1 -1
  39. package/dist/react/index.js +22 -9
  40. package/dist/react/index.js.map +1 -1
  41. package/dist/react/optimisticallySendMessage.js +1 -1
  42. package/dist/react/optimisticallySendMessage.js.map +1 -1
  43. package/dist/validators.d.ts +49 -55
  44. package/dist/validators.d.ts.map +1 -1
  45. package/dist/validators.js +3 -8
  46. package/dist/validators.js.map +1 -1
  47. package/package.json +4 -3
  48. package/src/client/index.ts +249 -268
  49. package/src/client/listMessages.ts +38 -0
  50. package/src/client/search.ts +172 -0
  51. package/src/client/streaming.ts +56 -3
  52. package/src/client/types.ts +5 -1
  53. package/src/component/_generated/api.d.ts +14 -3
  54. package/src/component/messages.ts +13 -7
  55. package/src/component/schema.ts +3 -2
  56. package/src/component/streams.ts +85 -39
  57. package/src/component/vector/index.ts +4 -4
  58. package/src/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  59. package/src/react/deltas.ts +4 -2
  60. package/src/react/index.ts +23 -11
  61. package/src/react/optimisticallySendMessage.ts +1 -1
  62. package/src/validators.ts +8 -10
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import type { ErrorMessage } from "convex-helpers";
2
+ import { omit, type ErrorMessage } from "convex-helpers";
3
3
  import {
4
4
  type PaginatedQueryArgs,
5
5
  type UsePaginatedQueryResult,
@@ -7,7 +7,7 @@ import {
7
7
  } from "convex/react";
8
8
  import { usePaginatedQuery } from "convex-helpers/react";
9
9
  import type { FunctionArgs } from "convex/server";
10
- import { useMemo, useState } from "react";
10
+ import { useMemo, useRef, useState } from "react";
11
11
  import type { MessageDoc } from "../client/index.js";
12
12
  import type { SyncStreamsReturnValue } from "../client/types.js";
13
13
  import type { StreamArgs } from "../validators.js";
@@ -103,14 +103,18 @@ export function useThreadMessages<
103
103
  ThreadMessagesArgs<Query>,
104
104
  ThreadMessagesResult<Query>
105
105
  >,
106
- !options.stream ? "skip" : args
106
+ !options.stream ||
107
+ args === "skip" ||
108
+ paginated.status === "LoadingFirstPage"
109
+ ? "skip"
110
+ : { ...args, startOrder: paginated.results.at(-1)?.order }
107
111
  );
108
112
 
109
113
  const merged = useMemo(() => {
110
114
  const streamListMessages =
111
115
  streamMessages?.map((m) => ({
112
116
  ...m,
113
- streaming: true,
117
+ streaming: !m.status || m.status === "streaming",
114
118
  })) ?? [];
115
119
  return {
116
120
  ...paginated,
@@ -150,7 +154,7 @@ export function useStreamingThreadMessages<
150
154
  Query extends ThreadStreamQuery<any, any>,
151
155
  >(
152
156
  query: Query,
153
- args: ThreadMessagesArgs<Query> | "skip"
157
+ args: (ThreadMessagesArgs<Query> & { startOrder?: number }) | "skip"
154
158
  ): Array<ThreadMessagesResult<Query>> | undefined {
155
159
  // Invariant: streamMessages[streamId] is comprised of all deltas up to the
156
160
  // cursor. There can be multiple messages in the same stream, e.g. for tool
@@ -158,15 +162,23 @@ export function useStreamingThreadMessages<
158
162
  const [streams, setStreams] = useState<
159
163
  Array<{ streamId: string; cursor: number; messages: MessageDoc[] }>
160
164
  >([]);
165
+ const startOrderRef = useRef<number>(0);
166
+ const queryArgs = args === "skip" ? args : omit(args, ["startOrder"]);
167
+ if (args !== "skip" && !startOrderRef.current && args.startOrder) {
168
+ startOrderRef.current = args.startOrder;
169
+ }
161
170
  // Get all the active streams
162
171
  const streamList = useQuery(
163
172
  query,
164
- args === "skip"
165
- ? args
173
+ queryArgs === "skip"
174
+ ? queryArgs
166
175
  : ({
167
- ...args,
176
+ ...queryArgs,
168
177
  paginationOpts: { cursor: null, numItems: 0 },
169
- streamArgs: { kind: "list" } as StreamArgs,
178
+ streamArgs: {
179
+ kind: "list",
180
+ startOrder: startOrderRef.current,
181
+ } as StreamArgs,
170
182
  } as FunctionArgs<Query>)
171
183
  ) as
172
184
  | { streams: Extract<SyncStreamsReturnValue, { kind: "list" }> }
@@ -186,10 +198,10 @@ export function useStreamingThreadMessages<
186
198
  // Get the deltas for all the active streams, if any.
187
199
  const cursorQuery = useQuery(
188
200
  query,
189
- args === "skip" || !streamList
201
+ queryArgs === "skip" || !streamList
190
202
  ? ("skip" as const)
191
203
  : ({
192
- ...args,
204
+ ...queryArgs,
193
205
  paginationOpts: { cursor: null, numItems: 0 },
194
206
  streamArgs: { kind: "deltas", cursors } as StreamArgs,
195
207
  } as FunctionArgs<Query>)
@@ -11,7 +11,7 @@ export function optimisticallySendMessage(
11
11
  ) => void {
12
12
  return (store, args) => {
13
13
  const queries = store.getAllQueries(query);
14
- let maxOrder = 0;
14
+ let maxOrder = -1;
15
15
  let maxStepOrder = 0;
16
16
  for (const q of queries) {
17
17
  if (q.args?.threadId !== args.threadId) continue;
package/src/validators.ts CHANGED
@@ -277,7 +277,7 @@ export const vMessageEmbeddings = v.object({
277
277
  dimension: vVectorDimension,
278
278
  vectors: v.array(v.union(v.array(v.number()), v.null())),
279
279
  });
280
-
280
+ export type MessageEmbeddings = Infer<typeof vMessageEmbeddings>;
281
281
 
282
282
  export const vObjectResult = v.object({
283
283
  request: vRequest,
@@ -290,20 +290,12 @@ export const vObjectResult = v.object({
290
290
  providerMetadata,
291
291
  });
292
292
  export type ObjectResult = Infer<typeof vObjectResult>;
293
- export const vSearchOptions = v.object({
294
- vector: v.optional(v.array(v.number())),
295
- vectorModel: v.optional(v.string()),
296
- text: v.optional(v.string()),
297
- limit: v.number(),
298
- vectorScoreThreshold: v.optional(v.number()),
299
- messageRange: v.optional(v.object({ before: v.number(), after: v.number() })),
300
- });
301
- export type SearchOptions = Infer<typeof vSearchOptions>;
302
293
 
303
294
  export const vContextOptionsSearchOptions = v.object({
304
295
  limit: v.number(),
305
296
  textSearch: v.optional(v.boolean()),
306
297
  vectorSearch: v.optional(v.boolean()),
298
+ vectorScoreThreshold: v.optional(v.number()),
307
299
  messageRange: v.optional(v.object({ before: v.number(), after: v.number() })),
308
300
  });
309
301
 
@@ -460,6 +452,7 @@ export const vStreamArgs = v.optional(
460
452
  v.union(
461
453
  v.object({
462
454
  kind: v.literal("list"),
455
+ startOrder: v.optional(v.number()),
463
456
  }),
464
457
  v.object({
465
458
  kind: v.literal("deltas"),
@@ -471,6 +464,11 @@ export type StreamArgs = Infer<typeof vStreamArgs>;
471
464
 
472
465
  export const vStreamMessage = v.object({
473
466
  streamId: v.string(),
467
+ status: v.union(
468
+ v.literal("streaming"),
469
+ v.literal("finished"),
470
+ v.literal("aborted")
471
+ ),
474
472
  order: v.number(),
475
473
  stepOrder: v.number(),
476
474
  // metadata