@blocksdiy/react-common 1.14.0 → 1.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type UIMessage } from "ai";
|
|
1
2
|
import { ReactNode, SetStateAction } from "react";
|
|
2
3
|
import { type VoiceCallMessage } from "../hooks/use-voice-call.js";
|
|
3
4
|
export interface Attachment {
|
|
@@ -12,7 +13,8 @@ type MessageType = "progress" | "text" | "missing_integration";
|
|
|
12
13
|
*
|
|
13
14
|
* Consumers of `@blocksdiy/react-common/agent-chat` currently read `msg.content`,
|
|
14
15
|
* `msg.role` (`human`/`ai`), `msg.attachments`, and the flattened compatibility
|
|
15
|
-
* fields returned from `AgentChatContextValue.messages`. Keep this shape stable
|
|
16
|
+
* fields returned from `AgentChatContextValue.messages`. Keep this shape stable
|
|
17
|
+
* while the runtime underneath moves to AI SDK `UIMessage` objects.
|
|
16
18
|
*/
|
|
17
19
|
export interface LegacyMessagePayload {
|
|
18
20
|
id: string;
|
|
@@ -24,30 +26,12 @@ export interface LegacyMessagePayload {
|
|
|
24
26
|
payload: Record<string, any>;
|
|
25
27
|
hiddenContent?: string;
|
|
26
28
|
}
|
|
27
|
-
type
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
};
|
|
31
|
-
type CopilotToolCall = {
|
|
32
|
-
id?: string;
|
|
33
|
-
name?: string;
|
|
34
|
-
args?: unknown;
|
|
35
|
-
input?: unknown;
|
|
36
|
-
function?: {
|
|
37
|
-
name?: string;
|
|
38
|
-
arguments?: unknown;
|
|
29
|
+
export type V1AiSdkMessagePayload = AgentChatUIMessage & {
|
|
30
|
+
metadata: AgentChatUIMessage["metadata"] & {
|
|
31
|
+
version: 1;
|
|
39
32
|
};
|
|
40
33
|
};
|
|
41
|
-
type
|
|
42
|
-
id?: string;
|
|
43
|
-
role?: string;
|
|
44
|
-
content?: string;
|
|
45
|
-
metadata?: CopilotMessageMetadata;
|
|
46
|
-
toolCalls?: CopilotToolCall[];
|
|
47
|
-
toolCallId?: string;
|
|
48
|
-
name?: string;
|
|
49
|
-
};
|
|
50
|
-
export type PersistedMessagePayload = LegacyMessagePayload | CopilotMessage;
|
|
34
|
+
export type PersistedMessagePayload = LegacyMessagePayload | V1AiSdkMessagePayload;
|
|
51
35
|
interface MessageItemBase {
|
|
52
36
|
createdAt: string;
|
|
53
37
|
createdBy?: string;
|
|
@@ -58,7 +42,10 @@ interface MessageItemBase {
|
|
|
58
42
|
export type LegacyMessageItem = MessageItemBase & {
|
|
59
43
|
msg: LegacyMessagePayload;
|
|
60
44
|
};
|
|
61
|
-
export type
|
|
45
|
+
export type V1AiSdkMessageItem = MessageItemBase & {
|
|
46
|
+
msg: V1AiSdkMessagePayload;
|
|
47
|
+
};
|
|
48
|
+
export type MessageItem = LegacyMessageItem | V1AiSdkMessageItem;
|
|
62
49
|
export interface AgentChatContextValue {
|
|
63
50
|
messages: MessageItem[];
|
|
64
51
|
attachments: Attachment[];
|
|
@@ -87,6 +74,15 @@ export interface AgentChatContextValue {
|
|
|
87
74
|
chatId?: string;
|
|
88
75
|
noPersistency?: boolean;
|
|
89
76
|
}
|
|
77
|
+
export type AgentChatUIMessage = UIMessage & {
|
|
78
|
+
metadata?: {
|
|
79
|
+
version?: 1;
|
|
80
|
+
hiddenPrompt?: string;
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
export declare const isV1AiSdkMessageItem: (message: MessageItem) => message is V1AiSdkMessageItem;
|
|
84
|
+
export declare const isLegacyMessageItem: (message: MessageItem) => message is LegacyMessageItem;
|
|
85
|
+
export declare const uiMessageToV1MessageItem: (message: AgentChatUIMessage, createdAt?: string) => V1AiSdkMessageItem;
|
|
90
86
|
export declare const useAgentChat: () => AgentChatContextValue;
|
|
91
87
|
export interface ToolCardContextValue {
|
|
92
88
|
open: boolean;
|
|
@@ -188,7 +184,7 @@ export interface AgentChatMessageProps {
|
|
|
188
184
|
message: MessageItem;
|
|
189
185
|
index: number;
|
|
190
186
|
}
|
|
191
|
-
export declare function AgentChatMessage({ message, index, ...props }: React.ComponentProps<"div"> & AgentChatMessageProps): import("react/jsx-runtime").JSX.Element;
|
|
187
|
+
export declare function AgentChatMessage({ message, index, ...props }: React.ComponentProps<"div"> & AgentChatMessageProps): import("react/jsx-runtime").JSX.Element | null;
|
|
192
188
|
export interface AgentChatMessagesProps {
|
|
193
189
|
asChild?: boolean;
|
|
194
190
|
autoScroll?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-chat.d.ts","sourceRoot":"","sources":["../../src/components/agent-chat.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-chat.d.ts","sourceRoot":"","sources":["../../src/components/agent-chat.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAwB,KAAK,SAAS,EAAE,MAAM,IAAI,CAAC;AAC1D,OAAO,EAEL,SAAS,EACT,cAAc,EAOf,MAAM,OAAO,CAAC;AAEf,OAAO,EAAgB,KAAK,gBAAgB,EAA4B,MAAM,yBAAyB,CAAC;AAYxG,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAqBD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,IAAI,CAAC;AACzC,KAAK,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,qBAAqB,CAAC;AAE/D;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,qBAAqB,GAAG,kBAAkB,GAAG;IACvD,QAAQ,EAAE,kBAAkB,CAAC,UAAU,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC,CAAA;KAAE,CAAC;CAC3D,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,oBAAoB,GAAG,qBAAqB,CAAC;AAEnF,UAAU,eAAe;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,iBAAiB,GAAG,eAAe,GAAG;IAAE,GAAG,EAAE,oBAAoB,CAAA;CAAE,CAAC;AAEhF,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG;IAAE,GAAG,EAAE,qBAAqB,CAAA;CAAE,CAAC;AAElF,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG,kBAAkB,CAAC;AAGjE,MAAM,WAAW,qBAAqB;IAEpC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,CAAC,EAAE,aAAa,CAAC;IAG9B,WAAW,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxG,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,WAAW,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IAClD,cAAc,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,KAAK,IAAI,CAAC;IACpD,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAG7B,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAClD,cAAc,EAAE,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAC7D,kBAAkB,EAAE,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5D,kBAAkB,EAAE,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IACvE,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAGvD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAUD,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG;IAC3C,QAAQ,CAAC,EAAE;QACT,OAAO,CAAC,EAAE,CAAC,CAAC;QACZ,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH,CAAC;AAKF,eAAO,MAAM,oBAAoB,GAAI,SAAS,WAAW,KAAG,OAAO,IAAI,kBACjC,CAAC;AAEvC,eAAO,MAAM,mBAAmB,GAAI,SAAS,WAAW,KAAG,OAAO,IAAI,iBACtC,CAAC;AA8DjC,eAAO,MAAM,wBAAwB,GACnC,SAAS,kBAAkB,EAC3B,kBAAoC,KACnC,kBAQF,CAAC;AAsCF,eAAO,MAAM,YAAY,6BAMxB,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CAClC;AAID,eAAO,MAAM,WAAW,4BAMvB,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,QAAQ,CAAC,EACvB,OAAe,EACf,WAAmB,EACnB,IAAI,EAAE,cAAc,EACpB,YAAY,EACZ,IAAI,EACJ,OAAO,EACP,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,aAAa,2CAyB7C;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,SAAS,CAAC;CAC7B;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAe,EACf,eAAe,EACf,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,eAAe,2CAU/C;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,wBAAgB,SAAS,CAAC,EACxB,OAAe,EACf,MAAM,EACN,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,cAAc,2CAS9C;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,WAAW,CAAC,EAAE,OAAe,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,gBAAgB,2CAIxG;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,OAAe,EACf,OAAO,EACP,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,wBAAwB,2CAiB3D;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,WAAW,CAAC,EAAE,OAAe,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,gBAAgB,2CAKxG;AAiHD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE;QACL,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,eAAe,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACxC,aAAa,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9D;AAiBD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gGAAgG;IAChG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wGAAwG;IACxG,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,gBAAgB,CAAC,EAAE,UAAU,EAAE,CAAC;IAChC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAClE;AAED,MAAM,MAAM,uBAAuB,GAAG,IAAI,CACxC,kBAAkB,EAClB,cAAc,GAAG,cAAc,GAAG,eAAe,GAAG,iBAAiB,CACtE,CAAC;AAsLF,eAAO,MAAM,aAAa,GAAI,qNAgB3B,kBAAkB,mDAwGpB,CAAC;AAyWF,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,IAAI,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC1C,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;CAC5E;AAkBD,eAAO,MAAM,iBAAiB,kCAG7B,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE,mBAAmB,2CA8P/D;AAID,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAYD,wBAAgB,gBAAgB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,qBAAqB,kDAMjH;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,wBAAgB,iBAAiB,CAAC,EAChC,OAAe,EACf,UAAiB,EACjB,mBAAmB,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,sBAAsB,2CA0FtD;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,OAAe,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,sBAAsB,kDASpH;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,OAAe,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,sBAAsB,kDASpH;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,mBAAmB,CAAC,KAAK,IAAI,CAAC;IAC7D,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,cAAc,CAAC,EAC7B,OAAe,EACf,QAAQ,EACR,SAAS,EACT,OAAO,EACP,UAAU,EACV,WAAW,EACX,MAAM,EACN,QAAQ,EACR,WAAkB,EAClB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,mBAAmB,2CA8IxD;AACD,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,oBAAoB,CAAC,EACnC,OAAe,EACf,OAAO,EACP,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,yBAAyB,2CAe5D;AAED,MAAM,WAAW,+BAA+B;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,0BAA0B,CAAC,EACzC,OAAe,EACf,OAAO,EACP,QAAQ,EACR,MAAM,EACN,QAAe,EACf,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,+BAA+B,2CAqDlE;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,UAAU,EACV,OAAe,EACf,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,wBAAwB,2CAIxD;AAED,MAAM,WAAW,8BAA8B;IAC7C,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,yBAAyB,CAAC,EACxC,UAAU,EACV,OAAe,EACf,OAAO,EACP,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,8BAA8B,2CAcjE;AAID,MAAM,WAAW,+BAA+B;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,0BAA0B,CAAC,EACzC,OAAe,EACf,OAAO,EACP,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,+BAA+B,2CAelE;AAED,MAAM,WAAW,6BAA6B;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,wBAAwB,CAAC,EACvC,OAAe,EACf,OAAO,EACP,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,6BAA6B,2CAehE;AAED,MAAM,WAAW,8BAA8B;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,yBAAyB,CAAC,EACxC,OAAe,EACf,OAAO,EACP,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,8BAA8B,2CAiBjE;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,oBAAoB,CAAC,EACnC,OAAe,EACf,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,yBAAyB,2CAezD;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,oBAAoB,CAAC,EACnC,OAAe,EACf,KAAK,EACL,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,yBAAyB,2CAiBzD"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
2
|
+
import { useChat } from "@ai-sdk/react";
|
|
3
3
|
import { AppVersionService, BlocksApiService, DataApiService, websocketsService } from "@blocksdiy/blocks-client-api";
|
|
4
4
|
import { getApiHost } from "@blocksdiy/blocks-client-api/envService";
|
|
5
5
|
import { WorkflowRequest } from "@blocksdiy/blocks-client-api/workflowService";
|
|
6
|
-
import { CopilotKit, useCopilotChatInternal } from "@copilotkit/react-core";
|
|
7
6
|
import { Slot } from "@radix-ui/react-slot";
|
|
7
|
+
import { DefaultChatTransport } from "ai";
|
|
8
8
|
import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, } from "react";
|
|
9
9
|
import { useVoiceCall } from "../hooks/use-voice-call.js";
|
|
10
10
|
/* public decouple - blocks common */
|
|
@@ -36,89 +36,77 @@ const generateId = (length = 10) => {
|
|
|
36
36
|
.toString(36)
|
|
37
37
|
.substring(2, 2 + length);
|
|
38
38
|
};
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
const parseMaybeJson = (value) => {
|
|
65
|
-
if (typeof value !== "string") {
|
|
66
|
-
return value;
|
|
67
|
-
}
|
|
68
|
-
try {
|
|
69
|
-
return JSON.parse(value);
|
|
70
|
-
}
|
|
71
|
-
catch {
|
|
72
|
-
return value;
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
const legacyPayloadToCopilotMessage = (message) => ({
|
|
76
|
-
id: message.id,
|
|
77
|
-
role: message.role === "human" ? "user" : "assistant",
|
|
78
|
-
content: message.content ?? "",
|
|
79
|
-
metadata: {
|
|
80
|
-
version: 1,
|
|
81
|
-
hiddenPrompt: message.hiddenContent,
|
|
82
|
-
},
|
|
83
|
-
});
|
|
84
|
-
const messageItemToCopilotMessage = (message) => {
|
|
85
|
-
return legacyPayloadToCopilotMessage(message.msg);
|
|
86
|
-
};
|
|
87
|
-
const normalizeCopilotToolCall = (toolCall, allMessages) => {
|
|
88
|
-
const toolCallId = toolCall.id;
|
|
89
|
-
const toolName = toolCall.function?.name ?? toolCall.name ?? "tool";
|
|
90
|
-
const toolResult = toolCallId
|
|
91
|
-
? allMessages.find((candidate) => candidate.role === "tool" && candidate.toolCallId === toolCallId)
|
|
92
|
-
: undefined;
|
|
93
|
-
return {
|
|
94
|
-
...toolCall,
|
|
95
|
-
type: `tool-${toolName}`,
|
|
96
|
-
toolCallId,
|
|
97
|
-
toolName,
|
|
98
|
-
state: toolResult ? "output-available" : "input-available",
|
|
99
|
-
input: parseMaybeJson(toolCall.function?.arguments ?? toolCall.args ?? toolCall.input),
|
|
100
|
-
...(toolResult ? { output: parseMaybeJson(toolResult.content) } : {}),
|
|
101
|
-
};
|
|
102
|
-
};
|
|
103
|
-
const copilotMessageToLegacyPayload = (message, allMessages = []) => {
|
|
104
|
-
if (!message.id || (message.role !== "user" && message.role !== "assistant")) {
|
|
39
|
+
const isV1AiSdkMessagePayload = (msg) => "metadata" in msg && msg.metadata?.version === 1;
|
|
40
|
+
export const isV1AiSdkMessageItem = (message) => isV1AiSdkMessagePayload(message.msg);
|
|
41
|
+
export const isLegacyMessageItem = (message) => !isV1AiSdkMessageItem(message);
|
|
42
|
+
const attachmentsToUiFileParts = (attachments = []) => attachments.map((attachment) => ({
|
|
43
|
+
type: "file",
|
|
44
|
+
url: attachment.url,
|
|
45
|
+
filename: attachment.fileName,
|
|
46
|
+
mediaType: attachment.fileType,
|
|
47
|
+
}));
|
|
48
|
+
const uiMessageToLegacyPayload = (message) => {
|
|
49
|
+
const text = message.parts
|
|
50
|
+
.filter((part) => part.type === "text")
|
|
51
|
+
.map((part) => part.text)
|
|
52
|
+
.join("");
|
|
53
|
+
const attachments = message.parts
|
|
54
|
+
.filter((part) => part.type === "file")
|
|
55
|
+
.map((part) => ({
|
|
56
|
+
url: part.url,
|
|
57
|
+
fileName: part.filename ?? "File",
|
|
58
|
+
fileType: part.mediaType ?? "application/octet-stream",
|
|
59
|
+
}));
|
|
60
|
+
if (!text && attachments.length === 0) {
|
|
105
61
|
return null;
|
|
106
62
|
}
|
|
107
|
-
const toolCalls = message.toolCalls?.map((toolCall) => normalizeCopilotToolCall(toolCall, allMessages)) ?? [];
|
|
108
63
|
return {
|
|
109
64
|
id: message.id,
|
|
110
65
|
role: message.role === "user" ? "human" : "ai",
|
|
111
66
|
type: "text",
|
|
112
|
-
content:
|
|
67
|
+
content: text,
|
|
68
|
+
attachments: attachments.length > 0 ? attachments : undefined,
|
|
113
69
|
hiddenContent: message.metadata?.hiddenPrompt,
|
|
114
|
-
payload:
|
|
70
|
+
payload: {},
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
const messageItemToLegacyPayload = (message) => {
|
|
74
|
+
if (isLegacyMessageItem(message)) {
|
|
75
|
+
return message.msg;
|
|
76
|
+
}
|
|
77
|
+
return uiMessageToLegacyPayload(message.msg);
|
|
78
|
+
};
|
|
79
|
+
const messageItemToUIMessage = (message) => {
|
|
80
|
+
if (isV1AiSdkMessageItem(message)) {
|
|
81
|
+
return message.msg;
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
id: message.msg.id,
|
|
85
|
+
role: message.msg.role === "human" ? "user" : "assistant",
|
|
86
|
+
parts: [{ type: "text", text: message.msg.content ?? "" }, ...attachmentsToUiFileParts(message.msg.attachments)],
|
|
87
|
+
metadata: {
|
|
88
|
+
version: 1,
|
|
89
|
+
hiddenPrompt: message.msg.hiddenContent,
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
export const uiMessageToV1MessageItem = (message, createdAt = new Date().toISOString()) => {
|
|
94
|
+
return {
|
|
95
|
+
createdAt,
|
|
96
|
+
msg: {
|
|
97
|
+
...message,
|
|
98
|
+
metadata: { ...message.metadata, version: 1 },
|
|
99
|
+
},
|
|
115
100
|
};
|
|
116
101
|
};
|
|
117
|
-
const
|
|
118
|
-
const appendCopilotErrorMessage = (messages, error) => {
|
|
102
|
+
const appendAiSdkErrorMessage = (messages, error) => {
|
|
119
103
|
const text = "Error: " + (error instanceof Error ? error.message : "Unknown error");
|
|
120
104
|
const lastMessage = messages[messages.length - 1];
|
|
121
|
-
|
|
105
|
+
const lastText = lastMessage?.parts
|
|
106
|
+
?.filter((part) => part.type === "text")
|
|
107
|
+
.map((part) => part.text)
|
|
108
|
+
.join("");
|
|
109
|
+
if (lastMessage?.role === "assistant" && lastText === text) {
|
|
122
110
|
return messages;
|
|
123
111
|
}
|
|
124
112
|
return [
|
|
@@ -126,33 +114,22 @@ const appendCopilotErrorMessage = (messages, error) => {
|
|
|
126
114
|
{
|
|
127
115
|
id: generateId(10),
|
|
128
116
|
role: "assistant",
|
|
129
|
-
|
|
117
|
+
parts: [{ type: "text", text }],
|
|
130
118
|
metadata: { version: 1 },
|
|
131
119
|
},
|
|
132
120
|
];
|
|
133
121
|
};
|
|
134
122
|
const storedMessageToLegacyView = (message) => {
|
|
135
|
-
if (
|
|
136
|
-
return message;
|
|
137
|
-
}
|
|
138
|
-
const legacyPayload = copilotMessageToLegacyPayload(message.msg);
|
|
139
|
-
if (legacyPayload) {
|
|
123
|
+
if (isV1AiSdkMessagePayload(message.msg)) {
|
|
140
124
|
return {
|
|
141
|
-
...message,
|
|
125
|
+
...uiMessageToV1MessageItem(message.msg, message.createdAt),
|
|
142
126
|
createdAt: message.createdAt,
|
|
143
|
-
|
|
127
|
+
id: message.id,
|
|
128
|
+
chatId: message.chatId,
|
|
129
|
+
threadId: message.threadId,
|
|
144
130
|
};
|
|
145
131
|
}
|
|
146
|
-
return
|
|
147
|
-
...message,
|
|
148
|
-
msg: {
|
|
149
|
-
id: message.msg.id ?? generateId(),
|
|
150
|
-
role: "ai",
|
|
151
|
-
type: "text",
|
|
152
|
-
content: "",
|
|
153
|
-
payload: {},
|
|
154
|
-
},
|
|
155
|
-
};
|
|
132
|
+
return message;
|
|
156
133
|
};
|
|
157
134
|
export const useAgentChat = () => {
|
|
158
135
|
const context = useContext(AgentChatContext);
|
|
@@ -325,7 +302,7 @@ const resolveAgentChatConfig = async ({ agentChatId, token, }) => {
|
|
|
325
302
|
},
|
|
326
303
|
};
|
|
327
304
|
};
|
|
328
|
-
const flattenLegacyMessages = (messages) => messages.map((m) => ({ ...m, ...m.msg }));
|
|
305
|
+
const flattenLegacyMessages = (messages) => messages.map((m) => (isV1AiSdkMessageItem(m) ? m : { ...m, ...m.msg }));
|
|
329
306
|
const createInitialAgentMessages = (initialMessages = []) => initialMessages.map((initialMessage) => {
|
|
330
307
|
const id = generateId();
|
|
331
308
|
return {
|
|
@@ -494,7 +471,7 @@ export const AgentChatRoot = ({ appId, token, agentBlockId, agentHarness, useAge
|
|
|
494
471
|
fetchedMessages,
|
|
495
472
|
};
|
|
496
473
|
if (isNewAgent) {
|
|
497
|
-
return _jsx(
|
|
474
|
+
return _jsx(AiSdkAgentChatProvider, { ...commonProps });
|
|
498
475
|
}
|
|
499
476
|
return _jsx(LegacyAgentChatProvider, { ...commonProps });
|
|
500
477
|
};
|
|
@@ -621,44 +598,50 @@ function LegacyAgentChatProvider({ appId, token, agentChatId, children, chatId,
|
|
|
621
598
|
const inputState = useAgentChatInputState({ isThinking, isFetchingMessages, sendMessage });
|
|
622
599
|
return (_jsx(AgentChatContextProvider, { ...inputState, messages: flattenLegacyMessages(messages), isThinking: isThinking, isFetchingMessages: isFetchingMessages, currentThreadId: currentThreadId, agentChatData: agentChatData, sendMessage: sendMessage, addMessages: addMessages, setCurrentThreadId: setCurrentThreadId, appId: appId, token: token, agentChatId: agentChatId, chatId: chatId, noPersistency: noPersistency, children: children }));
|
|
623
600
|
}
|
|
624
|
-
function
|
|
625
|
-
const copilotRuntimeUrl = `${getApiHost()}/agent-chat-stream`;
|
|
626
|
-
const agent = useMemo(() => new BlocksCopilotHttpAgent({ url: copilotRuntimeUrl }), [copilotRuntimeUrl]);
|
|
627
|
-
const agents = useMemo(() => ({ default: agent }), [agent]);
|
|
628
|
-
return (_jsx(CopilotKit, { runtimeUrl: copilotRuntimeUrl, agents__unsafe_dev_only: agents, children: _jsx(CopilotAgentChatProvider, { ...props, appId: appId, token: token, copilotAgent: agent }) }));
|
|
629
|
-
}
|
|
630
|
-
function CopilotAgentChatProvider({ appId, token, agentBlockId, agentChatId, children, chatId, noPersistency, currentThreadId, chatContext, chatContextFiles, agentChatData, shortTermMemory = { isEnabled: true, isPersistent: false }, isFetchingMessages, setCurrentThreadId, fetchedMessages, copilotAgent, }) {
|
|
601
|
+
function AiSdkAgentChatProvider({ appId, token, agentBlockId, agentChatId, children, chatId, noPersistency, currentThreadId, chatContext, chatContextFiles, agentChatData, shortTermMemory = { isEnabled: true, isPersistent: false }, isFetchingMessages, setCurrentThreadId, fetchedMessages, }) {
|
|
631
602
|
const [externalMessages, setExternalMessages] = useState([]);
|
|
632
|
-
const
|
|
633
|
-
const
|
|
634
|
-
const
|
|
635
|
-
|
|
603
|
+
const aiMessageCreatedAtByIdRef = useRef({});
|
|
604
|
+
const previousAiChatIdRef = useRef(undefined);
|
|
605
|
+
const aiChatTransport = useMemo(() => new DefaultChatTransport({
|
|
606
|
+
api: `${getApiHost()}/agent-chat-stream`,
|
|
607
|
+
credentials: "include",
|
|
608
|
+
prepareSendMessagesRequest: ({ body, id, messages, trigger, messageId }) => {
|
|
609
|
+
const submittedMessage = messages[messages.length - 1];
|
|
610
|
+
const requestMessages = Array.isArray(body?.messages) ? body.messages : [];
|
|
611
|
+
return {
|
|
612
|
+
body: {
|
|
613
|
+
...body,
|
|
614
|
+
id,
|
|
615
|
+
trigger,
|
|
616
|
+
messages: submittedMessage ? [...requestMessages, submittedMessage] : requestMessages,
|
|
617
|
+
...(messageId ? { messageId } : {}),
|
|
618
|
+
},
|
|
619
|
+
};
|
|
620
|
+
},
|
|
621
|
+
}), []);
|
|
622
|
+
const aiChatId = useMemo(() => [appId, agentChatId, chatId, currentThreadId].filter(Boolean).join(":"), [appId, agentChatId, chatId, currentThreadId]);
|
|
623
|
+
const { messages: aiMessages, sendMessage: sendAiSdkMessage, setMessages: setAiMessages, status: aiChatStatus, } = useChat({
|
|
624
|
+
id: aiChatId,
|
|
625
|
+
transport: aiChatTransport,
|
|
626
|
+
onError: (error) => {
|
|
627
|
+
setAiMessages((prev) => appendAiSdkErrorMessage(prev, error));
|
|
628
|
+
},
|
|
629
|
+
});
|
|
636
630
|
useEffect(() => {
|
|
637
|
-
if (
|
|
631
|
+
if (previousAiChatIdRef.current === aiChatId) {
|
|
638
632
|
return;
|
|
639
633
|
}
|
|
640
|
-
|
|
641
|
-
|
|
634
|
+
previousAiChatIdRef.current = aiChatId;
|
|
635
|
+
aiMessageCreatedAtByIdRef.current = {};
|
|
642
636
|
setExternalMessages([]);
|
|
643
|
-
|
|
644
|
-
}, [
|
|
645
|
-
const copilotMessageItems = useMemo(() => copilotMessages
|
|
646
|
-
.map((message) => {
|
|
647
|
-
const legacyPayload = copilotMessageToLegacyPayload(message, copilotMessages);
|
|
648
|
-
if (!legacyPayload) {
|
|
649
|
-
return null;
|
|
650
|
-
}
|
|
651
|
-
copilotMessageCreatedAtByIdRef.current[legacyPayload.id] ??= new Date().toISOString();
|
|
652
|
-
return {
|
|
653
|
-
createdAt: copilotMessageCreatedAtByIdRef.current[legacyPayload.id],
|
|
654
|
-
msg: legacyPayload,
|
|
655
|
-
};
|
|
656
|
-
})
|
|
657
|
-
.filter((message) => Boolean(message)), [copilotMessages]);
|
|
637
|
+
setAiMessages([]);
|
|
638
|
+
}, [aiChatId, setAiMessages]);
|
|
658
639
|
const messages = useMemo(() => {
|
|
659
640
|
const fetchedMessageItems = fetchedMessages.map(storedMessageToLegacyView);
|
|
660
641
|
const nextMessages = mergeMessageItemsById(fetchedMessageItems, externalMessages);
|
|
661
|
-
for (const
|
|
642
|
+
for (const aiMessage of aiMessages) {
|
|
643
|
+
aiMessageCreatedAtByIdRef.current[aiMessage.id] ??= new Date().toISOString();
|
|
644
|
+
const messageItem = uiMessageToV1MessageItem(aiMessage, aiMessageCreatedAtByIdRef.current[aiMessage.id]);
|
|
662
645
|
const existingIndex = nextMessages.findIndex((message) => message.msg.id === messageItem.msg.id);
|
|
663
646
|
if (existingIndex !== -1) {
|
|
664
647
|
nextMessages[existingIndex] = {
|
|
@@ -673,30 +656,26 @@ function CopilotAgentChatProvider({ appId, token, agentBlockId, agentChatId, chi
|
|
|
673
656
|
}
|
|
674
657
|
nextMessages.sort((a, b) => Date.parse(a.createdAt) - Date.parse(b.createdAt));
|
|
675
658
|
return nextMessages;
|
|
676
|
-
}, [
|
|
677
|
-
const isThinking =
|
|
659
|
+
}, [aiMessages, externalMessages, fetchedMessages]);
|
|
660
|
+
const isThinking = aiChatStatus === "submitted" || aiChatStatus === "streaming";
|
|
678
661
|
const addExternalMessages = useCallback((messagesToAdd) => {
|
|
679
662
|
const normalizedMessages = messagesToAdd.map(storedMessageToLegacyView);
|
|
680
663
|
setExternalMessages((prevMessages) => mergeMessageItemsById(prevMessages, normalizedMessages));
|
|
681
664
|
}, []);
|
|
682
|
-
const
|
|
683
|
-
|
|
684
|
-
}, [
|
|
665
|
+
const addAiSdkErrorMessage = useCallback((error) => {
|
|
666
|
+
setAiMessages((prev) => appendAiSdkErrorMessage(prev, error));
|
|
667
|
+
}, [setAiMessages]);
|
|
685
668
|
const sendMessage = useCallback(async ({ content, hiddenContent, ...message }) => {
|
|
686
669
|
try {
|
|
687
670
|
const messageId = generateId();
|
|
688
671
|
const uploadedAttachments = await uploadAttachments({ attachments: message.attachments, appId, token });
|
|
689
|
-
const
|
|
672
|
+
const userUiMessage = {
|
|
690
673
|
id: messageId,
|
|
691
674
|
role: "user",
|
|
692
|
-
|
|
675
|
+
parts: [{ type: "text", text: content ?? "" }, ...attachmentsToUiFileParts(uploadedAttachments)],
|
|
693
676
|
metadata: { version: 1, hiddenPrompt: hiddenContent ?? undefined },
|
|
694
677
|
};
|
|
695
|
-
|
|
696
|
-
.map(messageItemToCopilotMessage)
|
|
697
|
-
.filter((requestMessage) => Boolean(requestMessage));
|
|
698
|
-
setCopilotMessages(requestMessages);
|
|
699
|
-
copilotAgent.setRequestOptions({
|
|
678
|
+
await sendAiSdkMessage(userUiMessage, {
|
|
700
679
|
headers: {
|
|
701
680
|
...(token ? { Authorization: `Bearer ${token}` } : {}),
|
|
702
681
|
...(AppVersionService.getCurrentVersionNumber()
|
|
@@ -715,33 +694,25 @@ function CopilotAgentChatProvider({ appId, token, agentBlockId, agentChatId, chi
|
|
|
715
694
|
shortTermMemory,
|
|
716
695
|
chatContextFiles,
|
|
717
696
|
chatContext: formatChatContext(chatContext),
|
|
718
|
-
|
|
719
|
-
messages: [...requestMessages, userCopilotMessage],
|
|
720
|
-
messageId,
|
|
697
|
+
messages: messages.map(messageItemToUIMessage),
|
|
721
698
|
},
|
|
722
699
|
});
|
|
723
|
-
await sendCopilotMessage(userCopilotMessage);
|
|
724
700
|
}
|
|
725
701
|
catch (error) {
|
|
726
|
-
|
|
727
|
-
}
|
|
728
|
-
finally {
|
|
729
|
-
copilotAgent.clearRequestOptions();
|
|
702
|
+
addAiSdkErrorMessage(error);
|
|
730
703
|
}
|
|
731
704
|
}, [
|
|
732
|
-
|
|
705
|
+
addAiSdkErrorMessage,
|
|
733
706
|
agentBlockId,
|
|
734
707
|
agentChatId,
|
|
735
708
|
appId,
|
|
736
709
|
chatId,
|
|
737
710
|
chatContext,
|
|
738
711
|
chatContextFiles,
|
|
739
|
-
copilotAgent,
|
|
740
712
|
currentThreadId,
|
|
741
713
|
messages,
|
|
742
714
|
noPersistency,
|
|
743
|
-
|
|
744
|
-
setCopilotMessages,
|
|
715
|
+
sendAiSdkMessage,
|
|
745
716
|
shortTermMemory,
|
|
746
717
|
token,
|
|
747
718
|
]);
|
|
@@ -933,7 +904,7 @@ export function AgentChatVoice({ children }) {
|
|
|
933
904
|
return;
|
|
934
905
|
}
|
|
935
906
|
const conversationHistory = messagesRef.current
|
|
936
|
-
.filter((m) => Boolean(m.msg.content) && m.msg.type === "text" && !m.msg.payload?.isVoiceMarker)
|
|
907
|
+
.filter((m) => isLegacyMessageItem(m) && Boolean(m.msg.content) && m.msg.type === "text" && !m.msg.payload?.isVoiceMarker)
|
|
937
908
|
.slice(-20)
|
|
938
909
|
.map((m) => ({
|
|
939
910
|
role: (m.msg.role === "human" ? "user" : "assistant"),
|
|
@@ -973,7 +944,18 @@ export function AgentChatVoice({ children }) {
|
|
|
973
944
|
say: voiceSay,
|
|
974
945
|
}, children: children }));
|
|
975
946
|
}
|
|
947
|
+
const hasRenderableMessageContent = (message) => {
|
|
948
|
+
if (isV1AiSdkMessageItem(message)) {
|
|
949
|
+
return Boolean(message.msg.parts.length);
|
|
950
|
+
}
|
|
951
|
+
const hasTextContent = Boolean(message.msg.content);
|
|
952
|
+
const hasAttachments = Boolean(message.msg.attachments?.length);
|
|
953
|
+
return hasTextContent || hasAttachments;
|
|
954
|
+
};
|
|
976
955
|
export function AgentChatMessage({ message, index, ...props }) {
|
|
956
|
+
if (!hasRenderableMessageContent(message)) {
|
|
957
|
+
return null;
|
|
958
|
+
}
|
|
977
959
|
return _jsx("div", { "data-message-index": index, "data-message-role": message.msg.role, ...props });
|
|
978
960
|
}
|
|
979
961
|
export function AgentChatMessages({ asChild = false, autoScroll = true, scrollAreaClassName, ...props }) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blocksdiy/react-common",
|
|
3
|
-
"version": "1.14.
|
|
3
|
+
"version": "1.14.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "React common",
|
|
6
6
|
"keywords": [],
|
|
@@ -30,10 +30,10 @@
|
|
|
30
30
|
]
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@
|
|
34
|
-
"@copilotkit/react-core": "^1.57.1",
|
|
33
|
+
"@ai-sdk/react": "^3.0.177",
|
|
35
34
|
"@radix-ui/react-slot": "^1.2.3",
|
|
36
35
|
"@vapi-ai/web": "^2.5.2",
|
|
36
|
+
"ai": "^6.0.175",
|
|
37
37
|
"penpal": "^7.0.6",
|
|
38
38
|
"react": "^19.2.4",
|
|
39
39
|
"@blocksdiy/blocks-client-api": "1.5.0"
|