@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,43 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.optimisticallySendMessage = optimisticallySendMessage;
4
- const react_1 = require("convex/react");
5
- function optimisticallySendMessage(query) {
6
- return (store, args) => {
7
- const queries = store.getAllQueries(query);
8
- let maxOrder = 0;
9
- let maxStepOrder = 0;
10
- for (const q of queries) {
11
- if (q.args?.threadId !== args.threadId)
12
- continue;
13
- if (q.args.streamArgs)
14
- continue;
15
- for (const m of q.value?.page ?? []) {
16
- maxOrder = Math.max(maxOrder, m.order);
17
- maxStepOrder = Math.max(maxStepOrder, m.stepOrder);
18
- }
19
- }
20
- const order = maxOrder + 1;
21
- const stepOrder = 0;
22
- (0, react_1.insertAtTop)({
23
- paginatedQuery: query,
24
- argsToMatch: { threadId: args.threadId, streamArgs: undefined },
25
- item: {
26
- _creationTime: Date.now(),
27
- _id: crypto.randomUUID(),
28
- order,
29
- stepOrder,
30
- status: "pending",
31
- threadId: args.threadId,
32
- tool: false,
33
- message: {
34
- role: "user",
35
- content: args.prompt,
36
- },
37
- text: args.prompt,
38
- },
39
- localQueryStore: store,
40
- });
41
- };
42
- }
43
- //# sourceMappingURL=optimisticallySendMessage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"optimisticallySendMessage.js","sourceRoot":"","sources":["../../../src/react/optimisticallySendMessage.ts"],"names":[],"mappings":";;AAKA,8DAwCC;AA7CD,wCAA2C;AAK3C,SAAgB,yBAAyB,CACvC,KAAuC;IAKvC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC,QAAQ;gBAAE,SAAS;YACjD,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU;gBAAE,SAAS;YAChC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;gBACpC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;gBACvC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC;QAC3B,MAAM,SAAS,GAAG,CAAC,CAAC;QACpB,IAAA,mBAAW,EAAC;YACV,cAAc,EAAE,KAAK;YACrB,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE;YAC/D,IAAI,EAAE;gBACJ,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE;gBACzB,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE;gBACxB,KAAK;gBACL,SAAS;gBACT,MAAM,EAAE,SAAS;gBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,IAAI,CAAC,MAAM;iBACrB;gBACD,IAAI,EAAE,IAAI,CAAC,MAAM;aAClB;YACD,eAAe,EAAE,KAAK;SACvB,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -1,13 +0,0 @@
1
- import type { UIMessage as AIUIMessage } from "ai";
2
- import type { MessageDoc } from "../client/index.js";
3
- import type { MessageStatus } from "../validators.js";
4
- export type UIMessage = AIUIMessage & {
5
- key: string;
6
- order: number;
7
- stepOrder: number;
8
- status: "streaming" | MessageStatus;
9
- };
10
- export declare function toUIMessages(messages: (MessageDoc & {
11
- streaming?: boolean;
12
- })[]): UIMessage[];
13
- //# sourceMappingURL=toUIMessages.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"toUIMessages.d.ts","sourceRoot":"","sources":["../../../src/react/toUIMessages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,IAAI,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,GAAG,aAAa,CAAC;CACrC,CAAC;AAEF,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,CAAC,UAAU,GAAG;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,EAAE,GACjD,SAAS,EAAE,CA2Jb"}
@@ -1,149 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.toUIMessages = toUIMessages;
4
- const mapping_js_1 = require("../mapping.js");
5
- function toUIMessages(messages) {
6
- const uiMessages = [];
7
- let assistantMessage;
8
- for (const message of messages) {
9
- const coreMessage = message.message && (0, mapping_js_1.deserializeMessage)(message.message);
10
- const text = message.text ?? "";
11
- const content = coreMessage?.content;
12
- const nonStringContent = content && typeof content !== "string" ? content : [];
13
- if (!coreMessage)
14
- continue;
15
- const common = {
16
- id: message.id ?? message._id,
17
- createdAt: new Date(message._creationTime),
18
- order: message.order,
19
- stepOrder: message.stepOrder,
20
- status: message.streaming ? "streaming" : message.status,
21
- key: `${message.threadId}-${message.order}-${message.stepOrder}`,
22
- };
23
- if (coreMessage.role === "system") {
24
- uiMessages.push({
25
- ...common,
26
- role: "system",
27
- content: text,
28
- parts: [{ type: "text", text }],
29
- });
30
- }
31
- else if (coreMessage.role === "user") {
32
- const parts = [];
33
- if (text) {
34
- parts.push({ type: "text", text });
35
- }
36
- nonStringContent.forEach((contentPart) => {
37
- switch (contentPart.type) {
38
- case "file":
39
- case "image":
40
- parts.push((0, mapping_js_1.toUIFilePart)(contentPart));
41
- break;
42
- }
43
- });
44
- uiMessages.push({
45
- ...common,
46
- role: "user",
47
- content: message.text ?? "",
48
- parts,
49
- });
50
- }
51
- else {
52
- if (coreMessage.role === "tool" && !assistantMessage) {
53
- console.warn("Tool message without preceding assistant message.. skipping", message);
54
- continue;
55
- }
56
- if (!assistantMessage) {
57
- assistantMessage = {
58
- ...common,
59
- role: "assistant",
60
- content: "",
61
- parts: [],
62
- };
63
- uiMessages.push(assistantMessage);
64
- }
65
- else {
66
- assistantMessage.status = message.streaming
67
- ? "streaming"
68
- : message.status;
69
- }
70
- // update it to the last message's id
71
- assistantMessage.id = message.id ?? message._id;
72
- if (message.text) {
73
- assistantMessage.parts.push({
74
- type: "text",
75
- text: message.text,
76
- });
77
- assistantMessage.content += message.text;
78
- }
79
- if (message.reasoning) {
80
- assistantMessage.parts.push({
81
- type: "reasoning",
82
- reasoning: message.reasoning,
83
- details: message.reasoningDetails ?? [],
84
- });
85
- }
86
- for (const source of message.sources ?? []) {
87
- assistantMessage.parts.push({
88
- type: "source",
89
- source,
90
- });
91
- }
92
- for (const contentPart of nonStringContent) {
93
- switch (contentPart.type) {
94
- case "file":
95
- case "image":
96
- assistantMessage.parts.push((0, mapping_js_1.toUIFilePart)(contentPart));
97
- break;
98
- case "tool-call":
99
- assistantMessage.parts.push({
100
- type: "step-start",
101
- });
102
- assistantMessage.parts.push({
103
- type: "tool-invocation",
104
- toolInvocation: {
105
- state: "call",
106
- step: assistantMessage.parts.filter((part) => part.type === "tool-invocation").length,
107
- toolCallId: contentPart.toolCallId,
108
- toolName: contentPart.toolName,
109
- args: contentPart.args,
110
- },
111
- });
112
- break;
113
- case "tool-result": {
114
- const call = assistantMessage.parts.find((part) => part.type === "tool-invocation" &&
115
- part.toolInvocation.toolCallId === contentPart.toolCallId);
116
- const toolInvocation = {
117
- state: "result",
118
- toolCallId: contentPart.toolCallId,
119
- toolName: contentPart.toolName,
120
- args: call?.toolInvocation.args,
121
- result: contentPart.result,
122
- step: call?.toolInvocation.step ??
123
- assistantMessage.parts.filter((part) => part.type === "tool-invocation").length,
124
- };
125
- if (call) {
126
- call.toolInvocation = toolInvocation;
127
- }
128
- else {
129
- console.warn("Tool result without preceding tool call.. adding anyways", contentPart);
130
- assistantMessage.parts.push({
131
- type: "tool-invocation",
132
- toolInvocation,
133
- });
134
- }
135
- break;
136
- }
137
- }
138
- }
139
- }
140
- if (!message.tool &&
141
- assistantMessage &&
142
- assistantMessage.parts.length > 0) {
143
- // Reset it so the next set of tool calls will create a new assistant message
144
- assistantMessage = undefined;
145
- }
146
- }
147
- return uiMessages;
148
- }
149
- //# sourceMappingURL=toUIMessages.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"toUIMessages.js","sourceRoot":"","sources":["../../../src/react/toUIMessages.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- import type { BetterOmit, Expand } from "convex-helpers";
2
- import type { FunctionArgs, FunctionReference, PaginationOptions, PaginationResult } from "convex/server";
3
- import type { MessageDoc } from "../client/index.js";
4
- import type { SyncStreamsReturnValue } from "../client/types.js";
5
- import type { StreamArgs } from "../validators.js";
6
- export type ThreadQuery<Args = unknown, M extends MessageDoc = MessageDoc> = FunctionReference<"query", "public", {
7
- threadId: string;
8
- paginationOpts: PaginationOptions;
9
- /**
10
- * If { stream: true } is passed, it will also query for stream deltas.
11
- * In order for this to work, the query must take as an argument streamArgs.
12
- */
13
- streamArgs?: StreamArgs;
14
- } & Args, PaginationResult<M> & {
15
- streams?: SyncStreamsReturnValue;
16
- }>;
17
- export type ThreadStreamQuery<Args = Record<string, unknown>, M extends MessageDoc = MessageDoc> = FunctionReference<"query", "public", {
18
- threadId: string;
19
- paginationOpts: PaginationOptions;
20
- streamArgs?: StreamArgs;
21
- } & Args, PaginationResult<M> & {
22
- streams: SyncStreamsReturnValue;
23
- }>;
24
- export type ThreadMessagesArgs<Query extends ThreadQuery<unknown, MessageDoc>> = Query extends ThreadQuery<unknown, MessageDoc> ? Expand<BetterOmit<FunctionArgs<Query>, "paginationOpts" | "streamArgs">> : never;
25
- export type ThreadMessagesResult<Query extends ThreadQuery<unknown, MessageDoc>> = Query extends ThreadQuery<unknown, infer M> ? M : never;
26
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/react/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,MAAM,WAAW,CACrB,IAAI,GAAG,OAAO,EACd,CAAC,SAAS,UAAU,GAAG,UAAU,IAC/B,iBAAiB,CACnB,OAAO,EACP,QAAQ,EACR;IACE,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,iBAAiB,CAAC;IAElC;;;OAGG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,GAAG,IAAI,EACR,gBAAgB,CAAC,CAAC,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,sBAAsB,CAAA;CAAE,CAC3D,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAC3B,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,CAAC,SAAS,UAAU,GAAG,UAAU,IAC/B,iBAAiB,CACnB,OAAO,EACP,QAAQ,EACR;IACE,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,iBAAiB,CAAC;IAClC,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,GAAG,IAAI,EACR,gBAAgB,CAAC,CAAC,CAAC,GAAG;IAAE,OAAO,EAAE,sBAAsB,CAAA;CAAE,CAC1D,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAAC,KAAK,SAAS,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,IAC3E,KAAK,SAAS,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,GAC1C,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,gBAAgB,GAAG,YAAY,CAAC,CAAC,GACxE,KAAK,CAAC;AAEZ,MAAM,MAAM,oBAAoB,CAC9B,KAAK,SAAS,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,IAC5C,KAAK,SAAS,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/react/types.ts"],"names":[],"mappings":""}
@@ -1,20 +0,0 @@
1
- /**
2
- * A hook that smoothly displays text as it is streamed.
3
- *
4
- * @param text The text to display. Pass in the full text each time.
5
- * @param charsPerSec The number of characters to display per second.
6
- * @returns A tuple of the visible text and the state of the smooth text,
7
- * including the current cursor position and whether it's still streaming.
8
- * This allows you to decide if it's too far behind and you want to adjust
9
- * the charsPerSec or just prefer the full text.
10
- */
11
- export declare function useSmoothText(text: string, { charsPerSec, }?: {
12
- /**
13
- * The number of characters to display per second.
14
- */
15
- charsPerSec?: number;
16
- }): [string, {
17
- cursor: number;
18
- isStreaming: boolean;
19
- }];
20
- //# sourceMappingURL=useSmoothText.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useSmoothText.d.ts","sourceRoot":"","sources":["../../../src/react/useSmoothText.ts"],"names":[],"mappings":"AAKA;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,EACE,WAAiB,GAClB,GAAE;IACD;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACjB,GACL,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAAC,CAsDpD"}
@@ -1,54 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useSmoothText = useSmoothText;
4
- const react_1 = require("react");
5
- const FPS = 20;
6
- const MS_PER_FRAME = 1000 / FPS;
7
- const MAX_TIME_JUMP_MS = 250;
8
- /**
9
- * A hook that smoothly displays text as it is streamed.
10
- *
11
- * @param text The text to display. Pass in the full text each time.
12
- * @param charsPerSec The number of characters to display per second.
13
- * @returns A tuple of the visible text and the state of the smooth text,
14
- * including the current cursor position and whether it's still streaming.
15
- * This allows you to decide if it's too far behind and you want to adjust
16
- * the charsPerSec or just prefer the full text.
17
- */
18
- function useSmoothText(text, { charsPerSec = 256, } = {}) {
19
- const [visibleText, setVisibleText] = (0, react_1.useState)(text);
20
- const smoothState = (0, react_1.useRef)({
21
- tick: Date.now() + (text.length * 1000) / charsPerSec,
22
- cursor: text.length,
23
- start: Date.now(),
24
- initialLength: text.length,
25
- charsPerMs: charsPerSec / 1000,
26
- });
27
- const isStreaming = smoothState.current.cursor < text.length;
28
- (0, react_1.useEffect)(() => {
29
- if (!isStreaming) {
30
- return;
31
- }
32
- const latestCharsPerMs = (text.length - smoothState.current.initialLength) /
33
- (Date.now() - smoothState.current.start);
34
- // Smooth out the charsPerSec by averaging it with the previous value.
35
- smoothState.current.charsPerMs = Math.min((2 * latestCharsPerMs + smoothState.current.charsPerMs) / 3, smoothState.current.charsPerMs * 2);
36
- smoothState.current.tick = Math.max(smoothState.current.tick, Date.now() - 2 * MS_PER_FRAME);
37
- function update() {
38
- if (smoothState.current.cursor >= text.length) {
39
- return;
40
- }
41
- const now = Date.now();
42
- const timeSinceLastUpdate = Math.min(MAX_TIME_JUMP_MS, now - smoothState.current.tick);
43
- const chars = Math.floor(timeSinceLastUpdate * smoothState.current.charsPerMs);
44
- smoothState.current.cursor = Math.min(smoothState.current.cursor + chars, text.length);
45
- smoothState.current.tick = now;
46
- setVisibleText(text.slice(0, smoothState.current.cursor));
47
- }
48
- update();
49
- const interval = setInterval(update, MS_PER_FRAME);
50
- return () => clearInterval(interval);
51
- }, [text, isStreaming, charsPerSec]);
52
- return [visibleText, { cursor: smoothState.current.cursor, isStreaming }];
53
- }
54
- //# sourceMappingURL=useSmoothText.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useSmoothText.js","sourceRoot":"","sources":["../../../src/react/useSmoothText.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import type { CoreMessage } from "ai";
2
- import type { Message } from "./validators.js";
3
- export declare const DEFAULT_RECENT_MESSAGES = 100;
4
- export declare function isTool(message: Message | CoreMessage): boolean;
5
- export declare function extractText(message: Message | CoreMessage): string | undefined;
6
- export declare const DEFAULT_MESSAGE_RANGE: {
7
- before: number;
8
- after: number;
9
- };
10
- //# sourceMappingURL=shared.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AACtC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,wBAAgB,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,WAOpD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,sBAoBzD;AAED,eAAO,MAAM,qBAAqB;;;CAA0B,CAAC"}
@@ -1,35 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DEFAULT_MESSAGE_RANGE = exports.DEFAULT_RECENT_MESSAGES = void 0;
4
- exports.isTool = isTool;
5
- exports.extractText = extractText;
6
- exports.DEFAULT_RECENT_MESSAGES = 100;
7
- function isTool(message) {
8
- return (message.role === "tool" ||
9
- (message.role === "assistant" &&
10
- Array.isArray(message.content) &&
11
- message.content.some((c) => c.type === "tool-call")));
12
- }
13
- function extractText(message) {
14
- switch (message.role) {
15
- case "user":
16
- if (typeof message.content === "string") {
17
- return message.content;
18
- }
19
- return message.content
20
- .filter((c) => c.type === "text")
21
- .map((c) => c.text)
22
- .join("");
23
- case "assistant":
24
- if (typeof message.content === "string") {
25
- return message.content;
26
- }
27
- return message.content
28
- .filter((c) => c.type === "text")
29
- .map((c) => c.text)
30
- .join("");
31
- }
32
- return undefined;
33
- }
34
- exports.DEFAULT_MESSAGE_RANGE = { before: 2, after: 1 };
35
- //# sourceMappingURL=shared.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/shared.ts"],"names":[],"mappings":";;;AAKA,wBAOC;AAED,kCAoBC;AA/BY,QAAA,uBAAuB,GAAG,GAAG,CAAC;AAE3C,SAAgB,MAAM,CAAC,OAA8B;IACnD,OAAO,CACL,OAAO,CAAC,IAAI,KAAK,MAAM;QACvB,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;YAC3B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;YAC9B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CACvD,CAAC;AACJ,CAAC;AAED,SAAgB,WAAW,CAAC,OAA8B;IACxD,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,MAAM;YACT,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACxC,OAAO,OAAO,CAAC,OAAO,CAAC;YACzB,CAAC;YACD,OAAO,OAAO,CAAC,OAAO;iBACnB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;iBAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBAClB,IAAI,CAAC,EAAE,CAAC,CAAC;QACd,KAAK,WAAW;YACd,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACxC,OAAO,OAAO,CAAC,OAAO,CAAC;YACzB,CAAC;YACD,OAAO,OAAO,CAAC,OAAO;iBACnB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;iBAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBAClB,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAEY,QAAA,qBAAqB,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC"}