@convex-dev/agent 0.1.10 → 0.1.11

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 (132) hide show
  1. package/dist/esm/client/index.d.ts.map +1 -1
  2. package/dist/esm/client/index.js +25 -24
  3. package/dist/esm/client/index.js.map +1 -1
  4. package/dist/esm/mapping.d.ts +1 -0
  5. package/dist/esm/mapping.d.ts.map +1 -1
  6. package/dist/esm/mapping.js +2 -2
  7. package/dist/esm/mapping.js.map +1 -1
  8. package/dist/esm.tsbuildinfo +1 -1
  9. package/package.json +23 -53
  10. package/src/client/index.ts +27 -27
  11. package/src/mapping.ts +9 -2
  12. package/dist/commonjs/client/_generated/_ignore.d.ts +0 -1
  13. package/dist/commonjs/client/_generated/_ignore.d.ts.map +0 -1
  14. package/dist/commonjs/client/_generated/_ignore.js +0 -3
  15. package/dist/commonjs/client/_generated/_ignore.js.map +0 -1
  16. package/dist/commonjs/client/createTool.d.ts +0 -47
  17. package/dist/commonjs/client/createTool.d.ts.map +0 -1
  18. package/dist/commonjs/client/createTool.js +0 -49
  19. package/dist/commonjs/client/createTool.js.map +0 -1
  20. package/dist/commonjs/client/files.d.ts +0 -56
  21. package/dist/commonjs/client/files.d.ts.map +0 -1
  22. package/dist/commonjs/client/files.js +0 -129
  23. package/dist/commonjs/client/files.js.map +0 -1
  24. package/dist/commonjs/client/index.d.ts +0 -1355
  25. package/dist/commonjs/client/index.d.ts.map +0 -1
  26. package/dist/commonjs/client/index.js +0 -1169
  27. package/dist/commonjs/client/index.js.map +0 -1
  28. package/dist/commonjs/client/streaming.d.ts +0 -57
  29. package/dist/commonjs/client/streaming.d.ts.map +0 -1
  30. package/dist/commonjs/client/streaming.js +0 -148
  31. package/dist/commonjs/client/streaming.js.map +0 -1
  32. package/dist/commonjs/client/types.d.ts +0 -352
  33. package/dist/commonjs/client/types.d.ts.map +0 -1
  34. package/dist/commonjs/client/types.js +0 -3
  35. package/dist/commonjs/client/types.js.map +0 -1
  36. package/dist/commonjs/component/_generated/api.d.ts +0 -1938
  37. package/dist/commonjs/component/_generated/api.d.ts.map +0 -1
  38. package/dist/commonjs/component/_generated/api.js +0 -25
  39. package/dist/commonjs/component/_generated/api.js.map +0 -1
  40. package/dist/commonjs/component/_generated/dataModel.d.ts +0 -60
  41. package/dist/commonjs/component/_generated/server.d.ts +0 -149
  42. package/dist/commonjs/component/_generated/server.d.ts.map +0 -1
  43. package/dist/commonjs/component/_generated/server.js +0 -77
  44. package/dist/commonjs/component/_generated/server.js.map +0 -1
  45. package/dist/commonjs/component/apiKeys.d.ts +0 -11
  46. package/dist/commonjs/component/apiKeys.d.ts.map +0 -1
  47. package/dist/commonjs/component/apiKeys.js +0 -72
  48. package/dist/commonjs/component/apiKeys.js.map +0 -1
  49. package/dist/commonjs/component/convex.config.d.ts +0 -3
  50. package/dist/commonjs/component/convex.config.d.ts.map +0 -1
  51. package/dist/commonjs/component/convex.config.js +0 -5
  52. package/dist/commonjs/component/convex.config.js.map +0 -1
  53. package/dist/commonjs/component/files.d.ts +0 -90
  54. package/dist/commonjs/component/files.d.ts.map +0 -1
  55. package/dist/commonjs/component/files.js +0 -157
  56. package/dist/commonjs/component/files.js.map +0 -1
  57. package/dist/commonjs/component/messages.d.ts +0 -1479
  58. package/dist/commonjs/component/messages.d.ts.map +0 -1
  59. package/dist/commonjs/component/messages.js +0 -483
  60. package/dist/commonjs/component/messages.js.map +0 -1
  61. package/dist/commonjs/component/schema.d.ts +0 -4582
  62. package/dist/commonjs/component/schema.d.ts.map +0 -1
  63. package/dist/commonjs/component/schema.js +0 -167
  64. package/dist/commonjs/component/schema.js.map +0 -1
  65. package/dist/commonjs/component/streams.d.ts +0 -242
  66. package/dist/commonjs/component/streams.d.ts.map +0 -1
  67. package/dist/commonjs/component/streams.js +0 -323
  68. package/dist/commonjs/component/streams.js.map +0 -1
  69. package/dist/commonjs/component/threads.d.ts +0 -101
  70. package/dist/commonjs/component/threads.d.ts.map +0 -1
  71. package/dist/commonjs/component/threads.js +0 -188
  72. package/dist/commonjs/component/threads.js.map +0 -1
  73. package/dist/commonjs/component/users.d.ts +0 -52
  74. package/dist/commonjs/component/users.d.ts.map +0 -1
  75. package/dist/commonjs/component/users.js +0 -233
  76. package/dist/commonjs/component/users.js.map +0 -1
  77. package/dist/commonjs/component/vector/index.d.ts +0 -61
  78. package/dist/commonjs/component/vector/index.d.ts.map +0 -1
  79. package/dist/commonjs/component/vector/index.js +0 -153
  80. package/dist/commonjs/component/vector/index.js.map +0 -1
  81. package/dist/commonjs/component/vector/tables.d.ts +0 -58
  82. package/dist/commonjs/component/vector/tables.d.ts.map +0 -1
  83. package/dist/commonjs/component/vector/tables.js +0 -62
  84. package/dist/commonjs/component/vector/tables.js.map +0 -1
  85. package/dist/commonjs/mapping.d.ts +0 -50
  86. package/dist/commonjs/mapping.d.ts.map +0 -1
  87. package/dist/commonjs/mapping.js +0 -272
  88. package/dist/commonjs/mapping.js.map +0 -1
  89. package/dist/commonjs/package.json +0 -3
  90. package/dist/commonjs/react/deltas.d.ts +0 -29
  91. package/dist/commonjs/react/deltas.d.ts.map +0 -1
  92. package/dist/commonjs/react/deltas.js +0 -274
  93. package/dist/commonjs/react/deltas.js.map +0 -1
  94. package/dist/commonjs/react/index.d.ts +0 -95
  95. package/dist/commonjs/react/index.d.ts.map +0 -1
  96. package/dist/commonjs/react/index.js +0 -219
  97. package/dist/commonjs/react/index.js.map +0 -1
  98. package/dist/commonjs/react/optimisticallySendMessage.d.ts +0 -8
  99. package/dist/commonjs/react/optimisticallySendMessage.d.ts.map +0 -1
  100. package/dist/commonjs/react/optimisticallySendMessage.js +0 -43
  101. package/dist/commonjs/react/optimisticallySendMessage.js.map +0 -1
  102. package/dist/commonjs/react/toUIMessages.d.ts +0 -13
  103. package/dist/commonjs/react/toUIMessages.d.ts.map +0 -1
  104. package/dist/commonjs/react/toUIMessages.js +0 -149
  105. package/dist/commonjs/react/toUIMessages.js.map +0 -1
  106. package/dist/commonjs/react/types.d.ts +0 -26
  107. package/dist/commonjs/react/types.d.ts.map +0 -1
  108. package/dist/commonjs/react/types.js +0 -3
  109. package/dist/commonjs/react/types.js.map +0 -1
  110. package/dist/commonjs/react/useSmoothText.d.ts +0 -20
  111. package/dist/commonjs/react/useSmoothText.d.ts.map +0 -1
  112. package/dist/commonjs/react/useSmoothText.js +0 -54
  113. package/dist/commonjs/react/useSmoothText.js.map +0 -1
  114. package/dist/commonjs/shared.d.ts +0 -10
  115. package/dist/commonjs/shared.d.ts.map +0 -1
  116. package/dist/commonjs/shared.js +0 -35
  117. package/dist/commonjs/shared.js.map +0 -1
  118. package/dist/commonjs/validators.d.ts +0 -5716
  119. package/dist/commonjs/validators.d.ts.map +0 -1
  120. package/dist/commonjs/validators.js +0 -319
  121. package/dist/commonjs/validators.js.map +0 -1
  122. package/dist/commonjs/vitest.config.d.ts +0 -3
  123. package/dist/commonjs/vitest.config.d.ts.map +0 -1
  124. package/dist/commonjs/vitest.config.js +0 -9
  125. package/dist/commonjs/vitest.config.js.map +0 -1
  126. package/dist/commonjs.tsbuildinfo +0 -1
  127. package/dist/esm/vitest.config.d.ts +0 -3
  128. package/dist/esm/vitest.config.d.ts.map +0 -1
  129. package/dist/esm/vitest.config.js +0 -7
  130. package/dist/esm/vitest.config.js.map +0 -1
  131. package/react/package.json +0 -5
  132. 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"}