convex-durable-agents 0.2.1 → 0.2.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"agent-chat.d.ts","sourceRoot":"","sources":["../../src/react/agent-chat.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvD,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,4BAA4B,EACjC,KAAK,WAAW,EAChB,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAG/B,KAAK,mBAAmB,GAAG,iBAAiB,CAAC,UAAU,EAAE,QAAQ,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,CAAC,CAAC;AAE/G,KAAK,kBAAkB,GAAG,iBAAiB,CAAC,UAAU,EAAE,QAAQ,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,CAAC,CAAC;AAE9F,KAAK,oBAAoB,GAAG,iBAAiB,CAAC,UAAU,EAAE,QAAQ,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,CAAC,CAAC;AAEjH,MAAM,MAAM,mBAAmB,GAAG;IAChC,iCAAiC;IACjC,SAAS,EAAE,WAAW,CAAC;IACvB,iCAAiC;IACjC,WAAW,EAAE,mBAAmB,CAAC;IACjC,kCAAkC;IAClC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,oCAAoC;IACpC,YAAY,EAAE,oBAAoB,CAAC;IACnC,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,YAAY,EAAE,aAAa,CAAC;IAC5B,sCAAsC;IACtC,aAAa,EAAE,4BAA4B,CAAC;IAC5C,mHAAmH;IACnH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,GAAG;IACtE,mCAAmC;IACnC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,sBAAsB;IACtB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,gDAAgD;IAChD,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB,CAmD7E"}
1
+ {"version":3,"file":"agent-chat.d.ts","sourceRoot":"","sources":["../../src/react/agent-chat.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGvD,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,4BAA4B,EACjC,KAAK,WAAW,EAChB,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAG/B,KAAK,mBAAmB,GAAG,iBAAiB,CAAC,UAAU,EAAE,QAAQ,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,CAAC,CAAC;AAE/G,KAAK,kBAAkB,GAAG,iBAAiB,CAAC,UAAU,EAAE,QAAQ,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,CAAC,CAAC;AAE9F,KAAK,oBAAoB,GAAG,iBAAiB,CAAC,UAAU,EAAE,QAAQ,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,CAAC,CAAC;AAgBjH,MAAM,MAAM,mBAAmB,GAAG;IAChC,iCAAiC;IACjC,SAAS,EAAE,WAAW,CAAC;IACvB,iCAAiC;IACjC,WAAW,EAAE,mBAAmB,CAAC;IACjC,kCAAkC;IAClC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,oCAAoC;IACpC,YAAY,EAAE,oBAAoB,CAAC;IACnC,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,YAAY,EAAE,aAAa,CAAC;IAC5B,sCAAsC;IACtC,aAAa,EAAE,4BAA4B,CAAC;IAC5C,mHAAmH;IACnH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,GAAG;IACtE,mCAAmC;IACnC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,sBAAsB;IACtB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,gDAAgD;IAChD,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB,CAyD7E"}
@@ -1,6 +1,19 @@
1
1
  import { useMutation } from "convex/react";
2
2
  import { useCallback } from "react";
3
3
  import { useThreadMessages, } from "./use-thread-messages";
4
+ function createOptimisticMessageDoc({ prompt, threadId }) {
5
+ const now = Date.now();
6
+ const suffix = globalThis.crypto?.randomUUID?.() ?? `${Date.now()}-${Math.random().toString(16).slice(2)}`;
7
+ const id = `optimistic-${suffix}`;
8
+ return {
9
+ _id: id,
10
+ _creationTime: now,
11
+ threadId,
12
+ id,
13
+ role: "user",
14
+ parts: [{ type: "text", text: prompt }],
15
+ };
16
+ }
4
17
  /**
5
18
  * Combined hook for chat functionality with an agent thread.
6
19
  *
@@ -43,7 +56,13 @@ export function useAgentChat(options) {
43
56
  skip: !!stream,
44
57
  });
45
58
  // Create mutation functions
46
- const sendMessageMutation = useMutation(sendMessageRef);
59
+ const sendMessageMutation = useMutation(sendMessageRef).withOptimisticUpdate((localStore, args) => {
60
+ const currentMessages = localStore.getQuery(listMessages, { threadId: args.threadId }) ?? [];
61
+ localStore.setQuery(listMessages, { threadId: args.threadId }, [
62
+ ...currentMessages,
63
+ createOptimisticMessageDoc(args),
64
+ ]);
65
+ });
47
66
  const stopThreadMutation = useMutation(stopThreadRef);
48
67
  const resumeThreadMutation = useMutation(resumeThreadRef);
49
68
  // Wrap mutations to provide simplified API with threadId pre-bound
@@ -1 +1 @@
1
- {"version":3,"file":"agent-chat.js","sourceRoot":"","sources":["../../src/react/agent-chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAIL,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAqC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,YAAY,CAAC,OAA4B;IACvD,MAAM,EACJ,YAAY,EACZ,aAAa,EACb,SAAS,EACT,WAAW,EAAE,cAAc,EAC3B,UAAU,EAAE,aAAa,EACzB,YAAY,EAAE,eAAe,EAC7B,QAAQ,EACR,MAAM,GAAG,KAAK,GACf,GAAG,OAAO,CAAC;IAEZ,8CAA8C;IAC9C,MAAM,YAAY,GAAG,iBAAiB,CAAC;QACrC,aAAa,EAAE,YAAY;QAC3B,4BAA4B,EAAE,aAAa;QAC3C,WAAW,EAAE,SAAS;QACtB,QAAQ;QACR,IAAI,EAAE,CAAC,CAAC,MAAM;KACf,CAAC,CAAC;IAEH,4BAA4B;IAC5B,MAAM,mBAAmB,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;IACxD,MAAM,kBAAkB,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;IACtD,MAAM,oBAAoB,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;IAE1D,mEAAmE;IACnE,MAAM,WAAW,GAAG,WAAW,CAC7B,KAAK,EAAE,MAAc,EAAiB,EAAE;QACtC,OAAO,mBAAmB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IACnD,CAAC,EACD,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAChC,CAAC;IAEF,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,IAAmB,EAAE;QACjD,OAAO,kBAAkB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1C,CAAC,EAAE,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEnC,MAAM,MAAM,GAAG,WAAW,CACxB,KAAK,EAAE,MAAe,EAAiB,EAAE;QACvC,OAAO,oBAAoB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC,EACD,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CACjC,CAAC;IAEF,OAAO;QACL,GAAG,YAAY;QACf,WAAW;QACX,IAAI;QACJ,MAAM;KACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"agent-chat.js","sourceRoot":"","sources":["../../src/react/agent-chat.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "bugs": {
7
7
  "url": "https://github.com/ziegfried/convex-durable-agents/issues"
8
8
  },
9
- "version": "0.2.1",
9
+ "version": "0.2.2",
10
10
  "license": "Apache-2.0",
11
11
  "keywords": [
12
12
  "convex",
@@ -1,6 +1,7 @@
1
1
  import { useMutation } from "convex/react";
2
2
  import type { FunctionReference } from "convex/server";
3
3
  import { useCallback } from "react";
4
+ import type { MessageDoc } from "./types";
4
5
  import {
5
6
  type MessagesQuery,
6
7
  type StreamingMessageUpdatesQuery,
@@ -15,6 +16,20 @@ type StopThreadMutation = FunctionReference<"mutation", "public", { threadId: st
15
16
 
16
17
  type ResumeThreadMutation = FunctionReference<"mutation", "public", { threadId: string; prompt?: string }, null>;
17
18
 
19
+ function createOptimisticMessageDoc({ prompt, threadId }: { threadId: string; prompt: string }): MessageDoc {
20
+ const now = Date.now();
21
+ const suffix = globalThis.crypto?.randomUUID?.() ?? `${Date.now()}-${Math.random().toString(16).slice(2)}`;
22
+ const id = `optimistic-${suffix}`;
23
+ return {
24
+ _id: id,
25
+ _creationTime: now,
26
+ threadId,
27
+ id,
28
+ role: "user",
29
+ parts: [{ type: "text", text: prompt }],
30
+ };
31
+ }
32
+
18
33
  export type UseAgentChatOptions = {
19
34
  /** Query to get thread status */
20
35
  getThread: ThreadQuery;
@@ -96,7 +111,13 @@ export function useAgentChat(options: UseAgentChatOptions): UseAgentChatReturn {
96
111
  });
97
112
 
98
113
  // Create mutation functions
99
- const sendMessageMutation = useMutation(sendMessageRef);
114
+ const sendMessageMutation = useMutation(sendMessageRef).withOptimisticUpdate((localStore, args) => {
115
+ const currentMessages = localStore.getQuery(listMessages, { threadId: args.threadId }) ?? [];
116
+ localStore.setQuery(listMessages, { threadId: args.threadId }, [
117
+ ...currentMessages,
118
+ createOptimisticMessageDoc(args),
119
+ ]);
120
+ });
100
121
  const stopThreadMutation = useMutation(stopThreadRef);
101
122
  const resumeThreadMutation = useMutation(resumeThreadRef);
102
123