@convex-dev/agent 0.1.10 → 0.1.12

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 (138) hide show
  1. package/dist/esm/client/index.d.ts +2 -0
  2. package/dist/esm/client/index.d.ts.map +1 -1
  3. package/dist/esm/client/index.js +35 -26
  4. package/dist/esm/client/index.js.map +1 -1
  5. package/dist/esm/mapping.d.ts +1 -0
  6. package/dist/esm/mapping.d.ts.map +1 -1
  7. package/dist/esm/mapping.js +2 -2
  8. package/dist/esm/mapping.js.map +1 -1
  9. package/dist/esm/react/useSmoothText.d.ts +7 -1
  10. package/dist/esm/react/useSmoothText.d.ts.map +1 -1
  11. package/dist/esm/react/useSmoothText.js +5 -5
  12. package/dist/esm/react/useSmoothText.js.map +1 -1
  13. package/dist/esm.tsbuildinfo +1 -1
  14. package/package.json +24 -53
  15. package/src/client/index.ts +39 -29
  16. package/src/mapping.ts +9 -2
  17. package/src/react/useSmoothText.ts +11 -4
  18. package/dist/commonjs/client/_generated/_ignore.d.ts +0 -1
  19. package/dist/commonjs/client/_generated/_ignore.d.ts.map +0 -1
  20. package/dist/commonjs/client/_generated/_ignore.js +0 -3
  21. package/dist/commonjs/client/_generated/_ignore.js.map +0 -1
  22. package/dist/commonjs/client/createTool.d.ts +0 -47
  23. package/dist/commonjs/client/createTool.d.ts.map +0 -1
  24. package/dist/commonjs/client/createTool.js +0 -49
  25. package/dist/commonjs/client/createTool.js.map +0 -1
  26. package/dist/commonjs/client/files.d.ts +0 -56
  27. package/dist/commonjs/client/files.d.ts.map +0 -1
  28. package/dist/commonjs/client/files.js +0 -129
  29. package/dist/commonjs/client/files.js.map +0 -1
  30. package/dist/commonjs/client/index.d.ts +0 -1355
  31. package/dist/commonjs/client/index.d.ts.map +0 -1
  32. package/dist/commonjs/client/index.js +0 -1169
  33. package/dist/commonjs/client/index.js.map +0 -1
  34. package/dist/commonjs/client/streaming.d.ts +0 -57
  35. package/dist/commonjs/client/streaming.d.ts.map +0 -1
  36. package/dist/commonjs/client/streaming.js +0 -148
  37. package/dist/commonjs/client/streaming.js.map +0 -1
  38. package/dist/commonjs/client/types.d.ts +0 -352
  39. package/dist/commonjs/client/types.d.ts.map +0 -1
  40. package/dist/commonjs/client/types.js +0 -3
  41. package/dist/commonjs/client/types.js.map +0 -1
  42. package/dist/commonjs/component/_generated/api.d.ts +0 -1938
  43. package/dist/commonjs/component/_generated/api.d.ts.map +0 -1
  44. package/dist/commonjs/component/_generated/api.js +0 -25
  45. package/dist/commonjs/component/_generated/api.js.map +0 -1
  46. package/dist/commonjs/component/_generated/dataModel.d.ts +0 -60
  47. package/dist/commonjs/component/_generated/server.d.ts +0 -149
  48. package/dist/commonjs/component/_generated/server.d.ts.map +0 -1
  49. package/dist/commonjs/component/_generated/server.js +0 -77
  50. package/dist/commonjs/component/_generated/server.js.map +0 -1
  51. package/dist/commonjs/component/apiKeys.d.ts +0 -11
  52. package/dist/commonjs/component/apiKeys.d.ts.map +0 -1
  53. package/dist/commonjs/component/apiKeys.js +0 -72
  54. package/dist/commonjs/component/apiKeys.js.map +0 -1
  55. package/dist/commonjs/component/convex.config.d.ts +0 -3
  56. package/dist/commonjs/component/convex.config.d.ts.map +0 -1
  57. package/dist/commonjs/component/convex.config.js +0 -5
  58. package/dist/commonjs/component/convex.config.js.map +0 -1
  59. package/dist/commonjs/component/files.d.ts +0 -90
  60. package/dist/commonjs/component/files.d.ts.map +0 -1
  61. package/dist/commonjs/component/files.js +0 -157
  62. package/dist/commonjs/component/files.js.map +0 -1
  63. package/dist/commonjs/component/messages.d.ts +0 -1479
  64. package/dist/commonjs/component/messages.d.ts.map +0 -1
  65. package/dist/commonjs/component/messages.js +0 -483
  66. package/dist/commonjs/component/messages.js.map +0 -1
  67. package/dist/commonjs/component/schema.d.ts +0 -4582
  68. package/dist/commonjs/component/schema.d.ts.map +0 -1
  69. package/dist/commonjs/component/schema.js +0 -167
  70. package/dist/commonjs/component/schema.js.map +0 -1
  71. package/dist/commonjs/component/streams.d.ts +0 -242
  72. package/dist/commonjs/component/streams.d.ts.map +0 -1
  73. package/dist/commonjs/component/streams.js +0 -323
  74. package/dist/commonjs/component/streams.js.map +0 -1
  75. package/dist/commonjs/component/threads.d.ts +0 -101
  76. package/dist/commonjs/component/threads.d.ts.map +0 -1
  77. package/dist/commonjs/component/threads.js +0 -188
  78. package/dist/commonjs/component/threads.js.map +0 -1
  79. package/dist/commonjs/component/users.d.ts +0 -52
  80. package/dist/commonjs/component/users.d.ts.map +0 -1
  81. package/dist/commonjs/component/users.js +0 -233
  82. package/dist/commonjs/component/users.js.map +0 -1
  83. package/dist/commonjs/component/vector/index.d.ts +0 -61
  84. package/dist/commonjs/component/vector/index.d.ts.map +0 -1
  85. package/dist/commonjs/component/vector/index.js +0 -153
  86. package/dist/commonjs/component/vector/index.js.map +0 -1
  87. package/dist/commonjs/component/vector/tables.d.ts +0 -58
  88. package/dist/commonjs/component/vector/tables.d.ts.map +0 -1
  89. package/dist/commonjs/component/vector/tables.js +0 -62
  90. package/dist/commonjs/component/vector/tables.js.map +0 -1
  91. package/dist/commonjs/mapping.d.ts +0 -50
  92. package/dist/commonjs/mapping.d.ts.map +0 -1
  93. package/dist/commonjs/mapping.js +0 -272
  94. package/dist/commonjs/mapping.js.map +0 -1
  95. package/dist/commonjs/package.json +0 -3
  96. package/dist/commonjs/react/deltas.d.ts +0 -29
  97. package/dist/commonjs/react/deltas.d.ts.map +0 -1
  98. package/dist/commonjs/react/deltas.js +0 -274
  99. package/dist/commonjs/react/deltas.js.map +0 -1
  100. package/dist/commonjs/react/index.d.ts +0 -95
  101. package/dist/commonjs/react/index.d.ts.map +0 -1
  102. package/dist/commonjs/react/index.js +0 -219
  103. package/dist/commonjs/react/index.js.map +0 -1
  104. package/dist/commonjs/react/optimisticallySendMessage.d.ts +0 -8
  105. package/dist/commonjs/react/optimisticallySendMessage.d.ts.map +0 -1
  106. package/dist/commonjs/react/optimisticallySendMessage.js +0 -43
  107. package/dist/commonjs/react/optimisticallySendMessage.js.map +0 -1
  108. package/dist/commonjs/react/toUIMessages.d.ts +0 -13
  109. package/dist/commonjs/react/toUIMessages.d.ts.map +0 -1
  110. package/dist/commonjs/react/toUIMessages.js +0 -149
  111. package/dist/commonjs/react/toUIMessages.js.map +0 -1
  112. package/dist/commonjs/react/types.d.ts +0 -26
  113. package/dist/commonjs/react/types.d.ts.map +0 -1
  114. package/dist/commonjs/react/types.js +0 -3
  115. package/dist/commonjs/react/types.js.map +0 -1
  116. package/dist/commonjs/react/useSmoothText.d.ts +0 -20
  117. package/dist/commonjs/react/useSmoothText.d.ts.map +0 -1
  118. package/dist/commonjs/react/useSmoothText.js +0 -54
  119. package/dist/commonjs/react/useSmoothText.js.map +0 -1
  120. package/dist/commonjs/shared.d.ts +0 -10
  121. package/dist/commonjs/shared.d.ts.map +0 -1
  122. package/dist/commonjs/shared.js +0 -35
  123. package/dist/commonjs/shared.js.map +0 -1
  124. package/dist/commonjs/validators.d.ts +0 -5716
  125. package/dist/commonjs/validators.d.ts.map +0 -1
  126. package/dist/commonjs/validators.js +0 -319
  127. package/dist/commonjs/validators.js.map +0 -1
  128. package/dist/commonjs/vitest.config.d.ts +0 -3
  129. package/dist/commonjs/vitest.config.d.ts.map +0 -1
  130. package/dist/commonjs/vitest.config.js +0 -9
  131. package/dist/commonjs/vitest.config.js.map +0 -1
  132. package/dist/commonjs.tsbuildinfo +0 -1
  133. package/dist/esm/vitest.config.d.ts +0 -3
  134. package/dist/esm/vitest.config.d.ts.map +0 -1
  135. package/dist/esm/vitest.config.js +0 -7
  136. package/dist/esm/vitest.config.js.map +0 -1
  137. package/react/package.json +0 -5
  138. package/validators/package.json +0 -5
@@ -1,274 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.toUIMessages = void 0;
4
- exports.mergeDeltas = mergeDeltas;
5
- exports.applyDeltasToStreamMessage = applyDeltasToStreamMessage;
6
- exports.createStreamingMessage = createStreamingMessage;
7
- const toUIMessages_js_1 = require("./toUIMessages.js");
8
- Object.defineProperty(exports, "toUIMessages", { enumerable: true, get: function () { return toUIMessages_js_1.toUIMessages; } });
9
- function mergeDeltas(threadId, streamMessages, existingStreams, allDeltas) {
10
- const newStreams = [];
11
- // Seed the existing chunks
12
- let changed = false;
13
- for (const streamMessage of streamMessages) {
14
- const deltas = allDeltas.filter((d) => d.streamId === streamMessage.streamId);
15
- const existing = existingStreams.find((s) => s.streamId === streamMessage.streamId);
16
- const [newStream, messageChanged] = applyDeltasToStreamMessage(threadId, streamMessage, existing, deltas);
17
- newStreams.push(newStream);
18
- if (messageChanged)
19
- changed = true;
20
- }
21
- for (const { streamId } of existingStreams) {
22
- if (!newStreams.find((s) => s.streamId === streamId)) {
23
- // There's a stream that's no longer active.
24
- changed = true;
25
- }
26
- }
27
- const messages = newStreams
28
- .map((s) => s.messages)
29
- .flat()
30
- .sort((a, b) => a.order - b.order || a.stepOrder - b.stepOrder);
31
- return [messages, newStreams, changed];
32
- }
33
- // exported for testing
34
- function applyDeltasToStreamMessage(threadId, streamMessage, existing, deltas) {
35
- let changed = false;
36
- let cursor = existing?.cursor ?? 0;
37
- let parts = [];
38
- for (const delta of deltas.sort((a, b) => a.start - b.start)) {
39
- if (delta.parts.length === 0) {
40
- console.warn(`Got delta with no parts: ${JSON.stringify(delta)}`);
41
- continue;
42
- }
43
- if (cursor !== delta.start) {
44
- if (cursor >= delta.end) {
45
- console.debug(`Got duplicate delta for stream ${delta.streamId} at ${delta.start}`);
46
- continue;
47
- }
48
- else if (cursor < delta.start) {
49
- console.warn(`Got delta for stream ${delta.streamId} that has a gap ${cursor} -> ${delta.start}`);
50
- continue;
51
- }
52
- else {
53
- throw new Error(`Got unexpected delta for stream ${delta.streamId}: delta: ${delta.start} -> ${delta.end} existing cursor: ${cursor}`);
54
- }
55
- }
56
- changed = true;
57
- cursor = delta.end;
58
- parts.push(...delta.parts);
59
- }
60
- if (!changed) {
61
- return [
62
- existing ?? { streamId: streamMessage.streamId, cursor, messages: [] },
63
- false,
64
- ];
65
- }
66
- const existingMessages = existing?.messages ?? [];
67
- let currentMessage;
68
- if (existingMessages.length > 0) {
69
- // replace the last message with a new one
70
- const lastMessage = existingMessages.at(-1);
71
- currentMessage = {
72
- ...lastMessage,
73
- message: cloneMessageAndContent(lastMessage.message),
74
- };
75
- }
76
- else {
77
- const newMessage = createStreamingMessage(threadId, streamMessage, parts[0], existingMessages.length);
78
- parts = parts.slice(1);
79
- currentMessage = newMessage;
80
- }
81
- const newStream = {
82
- streamId: streamMessage.streamId,
83
- cursor,
84
- messages: [...existingMessages.slice(0, -1), currentMessage],
85
- };
86
- let lastContent = getLastContent(currentMessage);
87
- for (const part of parts) {
88
- let contentToAdd;
89
- const isToolRole = part.type === "source" || part.type === "tool-result";
90
- if (isToolRole !== (currentMessage.message.role === "tool")) {
91
- currentMessage = createStreamingMessage(threadId, streamMessage, part, newStream.messages.length);
92
- lastContent = getLastContent(currentMessage);
93
- newStream.messages.push(currentMessage);
94
- continue;
95
- }
96
- switch (part.type) {
97
- case "text-delta":
98
- currentMessage.text += part.textDelta;
99
- if (lastContent?.type === "text") {
100
- lastContent.text += part.textDelta;
101
- }
102
- else {
103
- contentToAdd = {
104
- type: "text",
105
- text: part.textDelta,
106
- };
107
- }
108
- break;
109
- case "tool-call-streaming-start":
110
- currentMessage.tool = true;
111
- contentToAdd = {
112
- type: "tool-call",
113
- toolCallId: part.toolCallId,
114
- toolName: part.toolName,
115
- args: "",
116
- };
117
- break;
118
- case "tool-call-delta":
119
- {
120
- currentMessage.tool = true;
121
- if (lastContent?.type !== "tool-call") {
122
- throw new Error("Expected last content to be a tool call");
123
- }
124
- if (typeof lastContent.args !== "string") {
125
- throw new Error("Expected args to be a string");
126
- }
127
- lastContent.args += part.argsTextDelta;
128
- }
129
- break;
130
- case "tool-call":
131
- currentMessage.tool = true;
132
- contentToAdd = part;
133
- break;
134
- case "reasoning":
135
- currentMessage.reasoning += part.textDelta;
136
- if (lastContent?.type === "reasoning") {
137
- lastContent.text += part.textDelta;
138
- }
139
- else {
140
- contentToAdd = {
141
- type: "reasoning",
142
- text: part.textDelta,
143
- };
144
- }
145
- break;
146
- case "source":
147
- if (!currentMessage.sources) {
148
- currentMessage.sources = [];
149
- }
150
- currentMessage.sources.push(part.source);
151
- break;
152
- case "tool-result":
153
- contentToAdd = part;
154
- break;
155
- default:
156
- console.warn(`Received unexpected part: ${JSON.stringify(part)}`);
157
- break;
158
- }
159
- if (contentToAdd) {
160
- if (!currentMessage.message.content) {
161
- currentMessage.message.content = [];
162
- }
163
- if (!Array.isArray(currentMessage.message?.content)) {
164
- throw new Error("Expected message content to be an array");
165
- }
166
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
167
- currentMessage.message.content.push(contentToAdd);
168
- lastContent = contentToAdd;
169
- }
170
- }
171
- return [newStream, true];
172
- }
173
- function cloneMessageAndContent(message) {
174
- return (message &&
175
- {
176
- ...message,
177
- content: Array.isArray(message.content)
178
- ? [...message.content]
179
- : message.content,
180
- });
181
- }
182
- function getLastContent(message) {
183
- if (Array.isArray(message.message?.content)) {
184
- return message.message.content.at(-1);
185
- }
186
- return undefined;
187
- }
188
- function createStreamingMessage(threadId, message, part, index) {
189
- const { streamId, ...rest } = message;
190
- const metadata = {
191
- _id: `${streamId}-${index}`,
192
- _creationTime: Date.now(),
193
- status: "pending",
194
- threadId,
195
- tool: false,
196
- ...rest,
197
- };
198
- switch (part.type) {
199
- case "text-delta":
200
- return {
201
- ...metadata,
202
- message: {
203
- role: "assistant",
204
- content: [{ type: "text", text: part.textDelta }],
205
- },
206
- text: part.textDelta,
207
- };
208
- case "tool-call-streaming-start":
209
- return {
210
- ...metadata,
211
- tool: true,
212
- message: {
213
- role: "assistant",
214
- content: [
215
- {
216
- type: "tool-call",
217
- toolName: part.toolName,
218
- toolCallId: part.toolCallId,
219
- args: "", // when it's a string, it's a partial call
220
- },
221
- ],
222
- },
223
- };
224
- case "reasoning":
225
- return {
226
- ...metadata,
227
- message: {
228
- role: "assistant",
229
- content: [{ type: "reasoning", text: part.textDelta }],
230
- },
231
- reasoning: part.textDelta,
232
- };
233
- case "source":
234
- console.warn("Received source part first??");
235
- return {
236
- ...metadata,
237
- tool: true,
238
- message: { role: "tool", content: [] },
239
- sources: [part.source],
240
- };
241
- case "tool-call":
242
- return {
243
- ...metadata,
244
- tool: true,
245
- message: { role: "assistant", content: [part] },
246
- };
247
- case "tool-call-delta":
248
- console.warn("Received tool call delta part first??");
249
- return {
250
- ...metadata,
251
- tool: true,
252
- message: {
253
- role: "assistant",
254
- content: [
255
- {
256
- type: "tool-call",
257
- toolCallId: part.toolCallId,
258
- toolName: part.toolName,
259
- args: part.argsTextDelta,
260
- },
261
- ],
262
- },
263
- };
264
- case "tool-result":
265
- return {
266
- ...metadata,
267
- tool: true,
268
- message: { role: "tool", content: [part] },
269
- };
270
- default:
271
- throw new Error(`Unexpected part type: ${JSON.stringify(part)}`);
272
- }
273
- }
274
- //# sourceMappingURL=deltas.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deltas.js","sourceRoot":"","sources":["../../../src/react/deltas.ts"],"names":[],"mappings":";;;AAaA,kCAgDC;AAGD,gEAmKC;AAuBD,wDA0FC;AA3UD,uDAAiD;AAExC,6FAFA,8BAAY,OAEA;AAErB,SAAgB,WAAW,CACzB,QAAgB,EAChB,cAA+B,EAC/B,eAIE,EACF,SAAwB;IAMxB,MAAM,UAAU,GAIX,EAAE,CAAC;IACR,2BAA2B;IAC3B,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,aAAa,CAAC,QAAQ,CAC7C,CAAC;QACF,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CACnC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,aAAa,CAAC,QAAQ,CAC7C,CAAC;QACF,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,GAAG,0BAA0B,CAC5D,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,MAAM,CACP,CAAC;QACF,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3B,IAAI,cAAc;YAAE,OAAO,GAAG,IAAI,CAAC;IACrC,CAAC;IACD,KAAK,MAAM,EAAE,QAAQ,EAAE,IAAI,eAAe,EAAE,CAAC;QAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,EAAE,CAAC;YACrD,4CAA4C;YAC5C,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,UAAU;SACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;SACtB,IAAI,EAAE;SACN,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAClE,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,uBAAuB;AACvB,SAAgB,0BAA0B,CACxC,QAAgB,EAChB,aAA4B,EAC5B,QAEa,EACb,MAAqB;IAErB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,MAAM,GAAG,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC;IACnC,IAAI,KAAK,GAAqB,EAAE,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7D,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,4BAA4B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClE,SAAS;QACX,CAAC;QACD,IAAI,MAAM,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;YAC3B,IAAI,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;gBACxB,OAAO,CAAC,KAAK,CACX,kCAAkC,KAAK,CAAC,QAAQ,OAAO,KAAK,CAAC,KAAK,EAAE,CACrE,CAAC;gBACF,SAAS;YACX,CAAC;iBAAM,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChC,OAAO,CAAC,IAAI,CACV,wBAAwB,KAAK,CAAC,QAAQ,mBAAmB,MAAM,OAAO,KAAK,CAAC,KAAK,EAAE,CACpF,CAAC;gBACF,SAAS;YACX,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CACb,mCAAmC,KAAK,CAAC,QAAQ,YAAY,KAAK,CAAC,KAAK,OAAO,KAAK,CAAC,GAAG,qBAAqB,MAAM,EAAE,CACtH,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO,GAAG,IAAI,CAAC;QACf,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,QAAQ,IAAI,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;YACtE,KAAK;SACN,CAAC;IACJ,CAAC;IAED,MAAM,gBAAgB,GAAG,QAAQ,EAAE,QAAQ,IAAI,EAAE,CAAC;IAElD,IAAI,cAA0B,CAAC;IAC/B,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,0CAA0C;QAC1C,MAAM,WAAW,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC;QAC7C,cAAc,GAAG;YACf,GAAG,WAAW;YACd,OAAO,EAAE,sBAAsB,CAAC,WAAW,CAAC,OAAO,CAAC;SACrD,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,UAAU,GAAG,sBAAsB,CACvC,QAAQ,EACR,aAAa,EACb,KAAK,CAAC,CAAC,CAAE,EACT,gBAAgB,CAAC,MAAM,CACxB,CAAC;QACF,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,cAAc,GAAG,UAAU,CAAC;IAC9B,CAAC;IACD,MAAM,SAAS,GAAG;QAChB,QAAQ,EAAE,aAAa,CAAC,QAAQ;QAChC,MAAM;QACN,QAAQ,EAAE,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC;KAC7D,CAAC;IACF,IAAI,WAAW,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,YAKS,CAAC;QACd,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC;QACzE,IAAI,UAAU,KAAK,CAAC,cAAc,CAAC,OAAQ,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,CAAC;YAC7D,cAAc,GAAG,sBAAsB,CACrC,QAAQ,EACR,aAAa,EACb,IAAI,EACJ,SAAS,CAAC,QAAQ,CAAC,MAAM,CAC1B,CAAC;YACF,WAAW,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;YAC7C,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACxC,SAAS;QACX,CAAC;QACD,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,YAAY;gBACf,cAAc,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC;gBACtC,IAAI,WAAW,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;oBACjC,WAAW,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC;gBACrC,CAAC;qBAAM,CAAC;oBACN,YAAY,GAAG;wBACb,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS;qBACrB,CAAC;gBACJ,CAAC;gBACD,MAAM;YACR,KAAK,2BAA2B;gBAC9B,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC;gBAC3B,YAAY,GAAG;oBACb,IAAI,EAAE,WAAW;oBACjB,UAAU,EAAE,IAAI,CAAC,UAAU;oBAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,IAAI,EAAE,EAAE;iBACT,CAAC;gBACF,MAAM;YACR,KAAK,iBAAiB;gBACpB,CAAC;oBACC,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC;oBAC3B,IAAI,WAAW,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;wBACtC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;oBAC7D,CAAC;oBACD,IAAI,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBACzC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;oBAClD,CAAC;oBACD,WAAW,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC;gBACzC,CAAC;gBACD,MAAM;YACR,KAAK,WAAW;gBACd,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC;gBAC3B,YAAY,GAAG,IAAI,CAAC;gBACpB,MAAM;YACR,KAAK,WAAW;gBACd,cAAc,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC;gBAC3C,IAAI,WAAW,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;oBACtC,WAAW,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC;gBACrC,CAAC;qBAAM,CAAC;oBACN,YAAY,GAAG;wBACb,IAAI,EAAE,WAAW;wBACjB,IAAI,EAAE,IAAI,CAAC,SAAS;qBACrB,CAAC;gBACJ,CAAC;gBACD,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;oBAC5B,cAAc,CAAC,OAAO,GAAG,EAAE,CAAC;gBAC9B,CAAC;gBACD,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACzC,MAAM;YACR,KAAK,aAAa;gBAChB,YAAY,GAAG,IAAI,CAAC;gBACpB,MAAM;YACR;gBACE,OAAO,CAAC,IAAI,CAAC,6BAA6B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAClE,MAAM;QACV,CAAC;QACD,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC,cAAc,CAAC,OAAQ,CAAC,OAAO,EAAE,CAAC;gBACrC,cAAc,CAAC,OAAQ,CAAC,OAAO,GAAG,EAAE,CAAC;YACvC,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;gBACpD,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;YAC7D,CAAC;YACD,8DAA8D;YAC9D,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,YAAmB,CAAC,CAAC;YACzD,WAAW,GAAG,YAAY,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,sBAAsB,CAC7B,OAA4B;IAE5B,OAAO,CACL,OAAO;QACN;YACC,GAAG,OAAO;YACV,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;gBACrC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;gBACtB,CAAC,CAAC,OAAO,CAAC,OAAO;SACD,CACrB,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,OAAmB;IACzC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;QAC5C,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,sBAAsB,CACpC,QAAgB,EAChB,OAAsB,EACtB,IAAoB,EACpB,KAAa;IAEb,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IACtC,MAAM,QAAQ,GAAe;QAC3B,GAAG,EAAE,GAAG,QAAQ,IAAI,KAAK,EAAE;QAC3B,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE;QACzB,MAAM,EAAE,SAAS;QACjB,QAAQ;QACR,IAAI,EAAE,KAAK;QACX,GAAG,IAAI;KACR,CAAC;IACF,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,YAAY;YACf,OAAO;gBACL,GAAG,QAAQ;gBACX,OAAO,EAAE;oBACP,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;iBAClD;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS;aACrB,CAAC;QACJ,KAAK,2BAA2B;YAC9B,OAAO;gBACL,GAAG,QAAQ;gBACX,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,WAAW;4BACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;4BACvB,UAAU,EAAE,IAAI,CAAC,UAAU;4BAC3B,IAAI,EAAE,EAAE,EAAE,0CAA0C;yBACrD;qBACF;iBACF;aACF,CAAC;QACJ,KAAK,WAAW;YACd,OAAO;gBACL,GAAG,QAAQ;gBACX,OAAO,EAAE;oBACP,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;iBACvD;gBACD,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAC7C,OAAO;gBACL,GAAG,QAAQ;gBACX,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;gBACtC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;aACvB,CAAC;QACJ,KAAK,WAAW;YACd,OAAO;gBACL,GAAG,QAAQ;gBACX,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE;aAChD,CAAC;QACJ,KAAK,iBAAiB;YACpB,OAAO,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;YACtD,OAAO;gBACL,GAAG,QAAQ;gBACX,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,WAAW;4BACjB,UAAU,EAAE,IAAI,CAAC,UAAU;4BAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;4BACvB,IAAI,EAAE,IAAI,CAAC,aAAa;yBACzB;qBACF;iBACF;aACF,CAAC;QACJ,KAAK,aAAa;YAChB,OAAO;gBACL,GAAG,QAAQ;gBACX,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE;aAC3C,CAAC;QACJ;YACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC;AACH,CAAC"}
@@ -1,95 +0,0 @@
1
- import type { ErrorMessage } from "convex-helpers";
2
- import { type UsePaginatedQueryResult } from "convex/react";
3
- import type { UIMessage } from "./toUIMessages.js";
4
- import { toUIMessages } from "./toUIMessages.js";
5
- import type { ThreadQuery, ThreadStreamQuery, ThreadMessagesArgs, ThreadMessagesResult } from "./types.js";
6
- export { optimisticallySendMessage } from "./optimisticallySendMessage.js";
7
- export { useSmoothText } from "./useSmoothText.js";
8
- export { toUIMessages, type UIMessage };
9
- /**
10
- * A hook that fetches messages from a thread.
11
- *
12
- * This hook is a wrapper around `usePaginatedQuery` and `useStreamingThreadMessages`.
13
- * It will fetch both full messages and streaming messages, and merge them together.
14
- *
15
- * The query must take as arguments `{ threadId, paginationOpts }` and return a
16
- * pagination result of objects that extend `MessageDoc`.
17
- *
18
- * For streaming, it should look like this:
19
- * ```ts
20
- * export const listThreadMessages = query({
21
- * args: {
22
- * threadId: v.string(),
23
- * paginationOpts: paginationOptsValidator,
24
- * streamArgs: vStreamArgs,
25
- * ... other arguments you want
26
- * },
27
- * handler: async (ctx, { threadId, paginationOpts, streamArgs }) => {
28
- * // await authorizeThreadAccess(ctx, threadId);
29
- * const paginated = await agent.listMessages(ctx, { threadId, paginationOpts });
30
- * const streams = await agent.syncStreams(ctx, { threadId, streamArgs });
31
- * // Here you could filter out / modify the documents & stream deltas.
32
- * return { ...paginated, streams };
33
- * },
34
- * });
35
- * ```
36
- *
37
- * Then the hook can be used like this:
38
- * ```ts
39
- * const messages = useThreadMessages(
40
- * api.myModule.listThreadMessages,
41
- * { threadId },
42
- * { initialNumItems: 10, stream: true }
43
- * );
44
- * ```
45
- *
46
- * @param query The query to use to fetch messages.
47
- * It must take as arguments `{ threadId, paginationOpts }` and return a
48
- * pagination result of objects that extend `MessageDoc`.
49
- * To support streaming, it must also take in `streamArgs: vStreamArgs` and
50
- * return a `streams` object returned from `agent.syncStreams`.
51
- * @param args The arguments to pass to the query other than `paginationOpts`
52
- * and `streamArgs`. So `{ threadId }` at minimum, plus any other arguments that
53
- * you want to pass to the query.
54
- * @param options The options for the query. Similar to usePaginatedQuery.
55
- * To enable streaming, pass `stream: true`.
56
- * @returns The messages. If stream is true, it will return a list of messages
57
- * that includes both full messages and streaming messages.
58
- */
59
- export declare function useThreadMessages<Query extends ThreadQuery<any, any>>(query: Query, args: ThreadMessagesArgs<Query> | "skip", options: {
60
- initialNumItems: number;
61
- stream?: Query extends ThreadStreamQuery ? boolean : ErrorMessage<"To enable streaming, your query must take in streamArgs: vStreamArgs and return a streams object returned from agent.syncStreams. See docs.">;
62
- }): UsePaginatedQueryResult<ThreadMessagesResult<Query> & {
63
- streaming?: boolean;
64
- }>;
65
- /**
66
- * A hook that fetches streaming messages from a thread.
67
- * This ONLY returns streaming messages. To get both, use `useThreadMessages`.
68
- *
69
- * @param query The query to use to fetch messages.
70
- * It must take as arguments `{ threadId, paginationOpts, streamArgs }` and
71
- * return a `streams` object returned from `agent.syncStreams`.
72
- * @param args The arguments to pass to the query other than `paginationOpts`
73
- * and `streamArgs`. So `{ threadId }` at minimum, plus any other arguments that
74
- * you want to pass to the query.
75
- * @returns The streaming messages.
76
- */
77
- export declare function useStreamingThreadMessages<Query extends ThreadStreamQuery<any, any>>(query: Query, args: ThreadMessagesArgs<Query> | "skip"): Array<ThreadMessagesResult<Query>> | undefined;
78
- /**
79
- * @deprecated use useThreadMessages or useStreamingThreadMessages instead
80
- * Use this hook to stream text from a server action, using the
81
- * toTextStreamResponse or equivalent HTTP streaming endpoint returning text.
82
- * @param url The URL of the server action to stream text from.
83
- * e.g. https://....convex.site/yourendpoint
84
- * @param threadId The ID of the thread to stream text from.
85
- * @param token The auth token to use for the request.
86
- * e.g. useAuthToken() from @convex-dev/auth/react
87
- * @returns A tuple containing the {text, loading, error} and a function to call the endpoint
88
- * with a given prompt, passing up { prompt, threadId } as the body in JSON.
89
- */
90
- export declare function useStreamingText(url: string, threadId: string | null, token?: string): readonly [{
91
- readonly text: string;
92
- readonly loading: boolean;
93
- readonly error: Error | null;
94
- }, (prompt: string) => Promise<void>];
95
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAEL,KAAK,uBAAuB,EAE7B,MAAM,cAAc,CAAC;AAOtB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,CAAC;AAExC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,wBAAgB,iBAAiB,CAE/B,KAAK,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,EAEnC,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,GAAG,MAAM,EACxC,OAAO,EAAE;IACP,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,KAAK,SAAS,iBAAiB,GACpC,OAAO,GACP,YAAY,CAAC,6IAA6I,CAAC,CAAC;CACjK,GACA,uBAAuB,CACxB,oBAAoB,CAAC,KAAK,CAAC,GAAG;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,CACtD,CA0CA;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CAExC,KAAK,SAAS,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,EAEzC,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,GAAG,MAAM,GACvC,KAAK,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,CAoEhD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,KAAK,CAAC,EAAE,MAAM;;;;YAOS,MAAM,oBA2C9B"}
@@ -1,219 +0,0 @@
1
- "use strict";
2
- "use client";
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.toUIMessages = exports.useSmoothText = exports.optimisticallySendMessage = void 0;
5
- exports.useThreadMessages = useThreadMessages;
6
- exports.useStreamingThreadMessages = useStreamingThreadMessages;
7
- exports.useStreamingText = useStreamingText;
8
- const react_1 = require("convex/react");
9
- const react_2 = require("convex-helpers/react");
10
- const react_3 = require("react");
11
- const toUIMessages_js_1 = require("./toUIMessages.js");
12
- Object.defineProperty(exports, "toUIMessages", { enumerable: true, get: function () { return toUIMessages_js_1.toUIMessages; } });
13
- const deltas_js_1 = require("./deltas.js");
14
- var optimisticallySendMessage_js_1 = require("./optimisticallySendMessage.js");
15
- Object.defineProperty(exports, "optimisticallySendMessage", { enumerable: true, get: function () { return optimisticallySendMessage_js_1.optimisticallySendMessage; } });
16
- var useSmoothText_js_1 = require("./useSmoothText.js");
17
- Object.defineProperty(exports, "useSmoothText", { enumerable: true, get: function () { return useSmoothText_js_1.useSmoothText; } });
18
- /**
19
- * A hook that fetches messages from a thread.
20
- *
21
- * This hook is a wrapper around `usePaginatedQuery` and `useStreamingThreadMessages`.
22
- * It will fetch both full messages and streaming messages, and merge them together.
23
- *
24
- * The query must take as arguments `{ threadId, paginationOpts }` and return a
25
- * pagination result of objects that extend `MessageDoc`.
26
- *
27
- * For streaming, it should look like this:
28
- * ```ts
29
- * export const listThreadMessages = query({
30
- * args: {
31
- * threadId: v.string(),
32
- * paginationOpts: paginationOptsValidator,
33
- * streamArgs: vStreamArgs,
34
- * ... other arguments you want
35
- * },
36
- * handler: async (ctx, { threadId, paginationOpts, streamArgs }) => {
37
- * // await authorizeThreadAccess(ctx, threadId);
38
- * const paginated = await agent.listMessages(ctx, { threadId, paginationOpts });
39
- * const streams = await agent.syncStreams(ctx, { threadId, streamArgs });
40
- * // Here you could filter out / modify the documents & stream deltas.
41
- * return { ...paginated, streams };
42
- * },
43
- * });
44
- * ```
45
- *
46
- * Then the hook can be used like this:
47
- * ```ts
48
- * const messages = useThreadMessages(
49
- * api.myModule.listThreadMessages,
50
- * { threadId },
51
- * { initialNumItems: 10, stream: true }
52
- * );
53
- * ```
54
- *
55
- * @param query The query to use to fetch messages.
56
- * It must take as arguments `{ threadId, paginationOpts }` and return a
57
- * pagination result of objects that extend `MessageDoc`.
58
- * To support streaming, it must also take in `streamArgs: vStreamArgs` and
59
- * return a `streams` object returned from `agent.syncStreams`.
60
- * @param args The arguments to pass to the query other than `paginationOpts`
61
- * and `streamArgs`. So `{ threadId }` at minimum, plus any other arguments that
62
- * you want to pass to the query.
63
- * @param options The options for the query. Similar to usePaginatedQuery.
64
- * To enable streaming, pass `stream: true`.
65
- * @returns The messages. If stream is true, it will return a list of messages
66
- * that includes both full messages and streaming messages.
67
- */
68
- function useThreadMessages(query, args, options) {
69
- // These are full messages
70
- const paginated = (0, react_2.usePaginatedQuery)(query, args, { initialNumItems: options.initialNumItems });
71
- // These are streaming messages that will not include full messages.
72
- const streamMessages = useStreamingThreadMessages(query, !options.stream ? "skip" : args);
73
- const merged = (0, react_3.useMemo)(() => {
74
- const streamListMessages = streamMessages?.map((m) => ({
75
- ...m,
76
- streaming: true,
77
- })) ?? [];
78
- return {
79
- ...paginated,
80
- results: paginated.results
81
- .map((m) => ({ ...m, streaming: false }))
82
- .concat(streamListMessages)
83
- .sort((a, b) => a.order === b.order ? a.stepOrder - b.stepOrder : a.order - b.order)
84
- // They shouldn't overlap, but check for duplicates just in case.
85
- .filter((m, i, arr) => !arr[i - 1] ||
86
- m.order !== arr[i - 1].order ||
87
- m.stepOrder !== arr[i - 1].stepOrder),
88
- };
89
- }, [paginated, streamMessages]);
90
- return merged;
91
- }
92
- /**
93
- * A hook that fetches streaming messages from a thread.
94
- * This ONLY returns streaming messages. To get both, use `useThreadMessages`.
95
- *
96
- * @param query The query to use to fetch messages.
97
- * It must take as arguments `{ threadId, paginationOpts, streamArgs }` and
98
- * return a `streams` object returned from `agent.syncStreams`.
99
- * @param args The arguments to pass to the query other than `paginationOpts`
100
- * and `streamArgs`. So `{ threadId }` at minimum, plus any other arguments that
101
- * you want to pass to the query.
102
- * @returns The streaming messages.
103
- */
104
- function useStreamingThreadMessages(query, args) {
105
- // Invariant: streamMessages[streamId] is comprised of all deltas up to the
106
- // cursor. There can be multiple messages in the same stream, e.g. for tool
107
- // calls.
108
- const [streams, setStreams] = (0, react_3.useState)([]);
109
- // Get all the active streams
110
- const streamList = (0, react_1.useQuery)(query, args === "skip"
111
- ? args
112
- : {
113
- ...args,
114
- paginationOpts: { cursor: null, numItems: 0 },
115
- streamArgs: { kind: "list" },
116
- });
117
- // Get the cursors for all the active streams
118
- const cursors = (0, react_3.useMemo)(() => {
119
- if (!streamList?.streams)
120
- return [];
121
- if (streamList.streams.kind !== "list") {
122
- throw new Error("Expected list streams");
123
- }
124
- return streamList.streams.messages.map(({ streamId }) => {
125
- const stream = streams.find((s) => s.streamId === streamId);
126
- const cursor = stream?.cursor ?? 0;
127
- return { streamId, cursor };
128
- });
129
- }, [streamList, streams]);
130
- // Get the deltas for all the active streams, if any.
131
- const cursorQuery = (0, react_1.useQuery)(query, args === "skip" || !streamList
132
- ? "skip"
133
- : {
134
- ...args,
135
- paginationOpts: { cursor: null, numItems: 0 },
136
- streamArgs: { kind: "deltas", cursors },
137
- });
138
- // Merge any deltas into the streamChunks, keeping it unmodified if unchanged.
139
- const threadId = args === "skip" ? undefined : args.threadId;
140
- const [messages, newStreams, changed] = (0, react_3.useMemo)(() => {
141
- if (!threadId)
142
- return [undefined, [], false];
143
- if (!streamList)
144
- return [undefined, [], false];
145
- if (cursorQuery && cursorQuery.streams?.kind !== "deltas") {
146
- throw new Error("Expected deltas streams");
147
- }
148
- return (0, deltas_js_1.mergeDeltas)(threadId, streamList.streams.messages, streams, cursorQuery?.streams?.deltas ?? []);
149
- }, [threadId, cursorQuery, streams, streamList]);
150
- // Now assemble the chunks into messages
151
- if (!threadId) {
152
- return undefined;
153
- }
154
- if (changed) {
155
- setStreams(newStreams);
156
- }
157
- return messages;
158
- }
159
- /**
160
- * @deprecated use useThreadMessages or useStreamingThreadMessages instead
161
- * Use this hook to stream text from a server action, using the
162
- * toTextStreamResponse or equivalent HTTP streaming endpoint returning text.
163
- * @param url The URL of the server action to stream text from.
164
- * e.g. https://....convex.site/yourendpoint
165
- * @param threadId The ID of the thread to stream text from.
166
- * @param token The auth token to use for the request.
167
- * e.g. useAuthToken() from @convex-dev/auth/react
168
- * @returns A tuple containing the {text, loading, error} and a function to call the endpoint
169
- * with a given prompt, passing up { prompt, threadId } as the body in JSON.
170
- */
171
- function useStreamingText(url, threadId, token) {
172
- const [text, setText] = (0, react_3.useState)("");
173
- const [loading, setLoading] = (0, react_3.useState)(false);
174
- const [error, setError] = (0, react_3.useState)(null);
175
- const readStream = (0, react_3.useMemo)(() => async (prompt) => {
176
- if (!threadId)
177
- return;
178
- try {
179
- setText("");
180
- setLoading(true);
181
- setError(null);
182
- const response = await fetch(url, {
183
- method: "POST",
184
- headers: {
185
- "Content-Type": "application/json",
186
- ...(token ? { Authorization: `Bearer ${token}` } : {}),
187
- },
188
- body: JSON.stringify({ prompt, threadId }),
189
- });
190
- if (!response.ok) {
191
- throw new Error(`HTTP error! status: ${response.status}`);
192
- }
193
- if (!response.body) {
194
- throw new Error("No body");
195
- }
196
- const reader = response.body.getReader();
197
- const decoder = new TextDecoder();
198
- let accumulatedText = "";
199
- while (true) {
200
- const { done, value } = await reader.read();
201
- if (done) {
202
- break;
203
- }
204
- accumulatedText += decoder.decode(value);
205
- setText(accumulatedText);
206
- }
207
- }
208
- catch (e) {
209
- if (e instanceof Error && e.name !== "AbortError") {
210
- setError(e);
211
- }
212
- }
213
- finally {
214
- setLoading(false);
215
- }
216
- }, [threadId, token, url]);
217
- return [{ text, loading, error }, readStream];
218
- }
219
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react/index.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import type { MessageDoc } from "../client/index.js";
2
- import type { OptimisticLocalStore } from "convex/browser";
3
- import type { ThreadQuery } from "./types.js";
4
- export declare function optimisticallySendMessage(query: ThreadQuery<unknown, MessageDoc>): (store: OptimisticLocalStore, args: {
5
- threadId: string;
6
- prompt: string;
7
- }) => void;
8
- //# sourceMappingURL=optimisticallySendMessage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"optimisticallySendMessage.d.ts","sourceRoot":"","sources":["../../../src/react/optimisticallySendMessage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,GACtC,CACD,KAAK,EAAE,oBAAoB,EAC3B,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,KACvC,IAAI,CAmCR"}