@ai-group/chat-sdk 3.7.5 → 3.8.0-alpha.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.
- package/README.md +36 -0
- package/dist/cjs/components/DislikeFeedback.js.map +2 -2
- package/dist/cjs/components/FileGallery/index.js +2 -1
- package/dist/cjs/components/FileGallery/index.js.map +3 -3
- package/dist/cjs/components/FolderTree/DirectoryTree.js.map +2 -2
- package/dist/cjs/components/Sources/components/CarouselCard.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/index.js +307 -59
- package/dist/cjs/components/XAdkChatbot/index.js.map +3 -3
- package/dist/cjs/components/XAdkChatbot/styles.d.ts +4 -0
- package/dist/cjs/components/XAdkChatbot/styles.js +59 -2
- package/dist/cjs/components/XAdkChatbot/styles.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/utils.d.ts +14 -0
- package/dist/cjs/components/XAdkChatbot/utils.js +79 -0
- package/dist/cjs/components/XAdkChatbot/utils.js.map +7 -0
- package/dist/cjs/components/XAdkProvider/compound/DislikeFeedBack.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/compound/Messages.d.ts +7 -1
- package/dist/cjs/components/XAdkProvider/compound/Messages.js +12 -0
- package/dist/cjs/components/XAdkProvider/compound/Messages.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/compound/Sidebar.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/context/ChatStateContext.d.ts +2 -0
- package/dist/cjs/components/XAdkProvider/context/ChatStateContext.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/index.js +3 -0
- package/dist/cjs/components/XAdkProvider/index.js.map +2 -2
- package/dist/cjs/components/XAdkSender/InputTags.js.map +2 -2
- package/dist/cjs/components/XAdkSender/index.js +53 -5
- package/dist/cjs/components/XAdkSender/index.js.map +3 -3
- package/dist/cjs/components/XAdkThoughtChain/index.js +27 -28
- package/dist/cjs/components/XAdkThoughtChain/index.js.map +2 -2
- package/dist/cjs/components/XAdkThoughtChain/styles.d.ts +3 -1
- package/dist/cjs/components/XAdkThoughtChain/styles.js +66 -39
- package/dist/cjs/components/XAdkThoughtChain/styles.js.map +2 -2
- package/dist/cjs/components/XAiChatbot/index.js.map +2 -2
- package/dist/cjs/components/XAiConversations/index.js +2 -1
- package/dist/cjs/components/XAiConversations/index.js.map +3 -3
- package/dist/cjs/components/XAiProvider/index.js.map +2 -2
- package/dist/cjs/components/XAiSender/index.js.map +2 -2
- package/dist/cjs/hooks/useADKChat.d.ts +6 -1
- package/dist/cjs/hooks/useADKChat.js +15 -1
- package/dist/cjs/hooks/useADKChat.js.map +2 -2
- package/dist/cjs/hooks/useADKMessageQueue.d.ts +24 -0
- package/dist/cjs/hooks/useADKMessageQueue.js +107 -0
- package/dist/cjs/hooks/useADKMessageQueue.js.map +7 -0
- package/dist/cjs/index.d.ts +3 -1
- package/dist/cjs/index.js +3 -0
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/react/index.d.ts +2 -0
- package/dist/cjs/react/index.js +3 -0
- package/dist/cjs/react/index.js.map +2 -2
- package/dist/cjs/types/XAdkChatbot.d.ts +49 -0
- package/dist/cjs/types/XAdkChatbot.js.map +1 -1
- package/dist/cjs/types/XAdkProvider.d.ts +7 -0
- package/dist/cjs/types/XAdkProvider.js.map +2 -2
- package/dist/cjs/types/XAdkSender.d.ts +8 -1
- package/dist/cjs/types/XAdkSender.js.map +1 -1
- package/dist/cjs/types/XAdkThoughtChain.d.ts +2 -0
- package/dist/cjs/types/XAdkThoughtChain.js.map +1 -1
- package/dist/cjs/types/antdx.d.ts +6 -3
- package/dist/cjs/types/antdx.js.map +1 -1
- package/dist/esm/components/DislikeFeedback.js.map +1 -1
- package/dist/esm/components/FileGallery/index.js +2 -1
- package/dist/esm/components/FileGallery/index.js.map +1 -1
- package/dist/esm/components/FolderTree/DirectoryTree.js.map +1 -1
- package/dist/esm/components/Sources/components/CarouselCard.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/index.js +277 -25
- package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/styles.d.ts +4 -0
- package/dist/esm/components/XAdkChatbot/styles.js +30 -26
- package/dist/esm/components/XAdkChatbot/styles.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/utils.d.ts +14 -0
- package/dist/esm/components/XAdkChatbot/utils.js +66 -0
- package/dist/esm/components/XAdkChatbot/utils.js.map +1 -0
- package/dist/esm/components/XAdkProvider/compound/DislikeFeedBack.js.map +1 -1
- package/dist/esm/components/XAdkProvider/compound/Messages.d.ts +7 -1
- package/dist/esm/components/XAdkProvider/compound/Messages.js +16 -2
- package/dist/esm/components/XAdkProvider/compound/Messages.js.map +1 -1
- package/dist/esm/components/XAdkProvider/compound/Sidebar.js.map +1 -1
- package/dist/esm/components/XAdkProvider/context/ChatStateContext.d.ts +2 -0
- package/dist/esm/components/XAdkProvider/context/ChatStateContext.js.map +1 -1
- package/dist/esm/components/XAdkProvider/index.js +4 -2
- package/dist/esm/components/XAdkProvider/index.js.map +1 -1
- package/dist/esm/components/XAdkSender/InputTags.js.map +1 -1
- package/dist/esm/components/XAdkSender/index.js +80 -16
- package/dist/esm/components/XAdkSender/index.js.map +1 -1
- package/dist/esm/components/XAdkThoughtChain/index.js +52 -78
- package/dist/esm/components/XAdkThoughtChain/index.js.map +1 -1
- package/dist/esm/components/XAdkThoughtChain/styles.d.ts +3 -1
- package/dist/esm/components/XAdkThoughtChain/styles.js +29 -27
- package/dist/esm/components/XAdkThoughtChain/styles.js.map +1 -1
- package/dist/esm/components/XAiChatbot/index.js.map +1 -1
- package/dist/esm/components/XAiConversations/index.js +2 -1
- package/dist/esm/components/XAiConversations/index.js.map +1 -1
- package/dist/esm/components/XAiProvider/index.js.map +1 -1
- package/dist/esm/components/XAiSender/index.js.map +1 -1
- package/dist/esm/hooks/useADKChat.d.ts +6 -1
- package/dist/esm/hooks/useADKChat.js +18 -1
- package/dist/esm/hooks/useADKChat.js.map +1 -1
- package/dist/esm/hooks/useADKMessageQueue.d.ts +24 -0
- package/dist/esm/hooks/useADKMessageQueue.js +159 -0
- package/dist/esm/hooks/useADKMessageQueue.js.map +1 -0
- package/dist/esm/index.d.ts +3 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/react/index.d.ts +2 -0
- package/dist/esm/react/index.js +1 -0
- package/dist/esm/react/index.js.map +1 -1
- package/dist/esm/types/XAdkChatbot.d.ts +49 -0
- package/dist/esm/types/XAdkChatbot.js.map +1 -1
- package/dist/esm/types/XAdkProvider.d.ts +7 -0
- package/dist/esm/types/XAdkProvider.js.map +1 -1
- package/dist/esm/types/XAdkSender.d.ts +8 -1
- package/dist/esm/types/XAdkSender.js.map +1 -1
- package/dist/esm/types/XAdkThoughtChain.d.ts +2 -0
- package/dist/esm/types/XAdkThoughtChain.js.map +1 -1
- package/dist/esm/types/antdx.d.ts +6 -3
- package/dist/esm/types/antdx.js.map +1 -1
- package/dist/umd/chat-sdk.min.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// src/hooks/useADKMessageQueue.ts
|
|
20
|
+
var useADKMessageQueue_exports = {};
|
|
21
|
+
__export(useADKMessageQueue_exports, {
|
|
22
|
+
useADKMessageQueue: () => useADKMessageQueue
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(useADKMessageQueue_exports);
|
|
25
|
+
var import_react = require("react");
|
|
26
|
+
var import_uuid = require("uuid");
|
|
27
|
+
function useADKMessageQueue({
|
|
28
|
+
sessionId,
|
|
29
|
+
loading,
|
|
30
|
+
send,
|
|
31
|
+
stop,
|
|
32
|
+
interrupt,
|
|
33
|
+
enabled = true,
|
|
34
|
+
drainInactiveSessions = false
|
|
35
|
+
}) {
|
|
36
|
+
const [queuedMessages, setQueuedMessages] = (0, import_react.useState)([]);
|
|
37
|
+
const [interrupting, setInterrupting] = (0, import_react.useState)(false);
|
|
38
|
+
const [drainTick, setDrainTick] = (0, import_react.useState)(0);
|
|
39
|
+
const queueRef = (0, import_react.useRef)(queuedMessages);
|
|
40
|
+
const busySessionsRef = (0, import_react.useRef)(/* @__PURE__ */ new Set());
|
|
41
|
+
const loadingRef = (0, import_react.useRef)(loading);
|
|
42
|
+
const interruptingRef = (0, import_react.useRef)(false);
|
|
43
|
+
const callbacksRef = (0, import_react.useRef)({ send, stop, interrupt });
|
|
44
|
+
callbacksRef.current = { send, stop, interrupt };
|
|
45
|
+
loadingRef.current = loading;
|
|
46
|
+
const updateQueue = (0, import_react.useCallback)((update) => {
|
|
47
|
+
const next = update(queueRef.current);
|
|
48
|
+
queueRef.current = next;
|
|
49
|
+
setQueuedMessages(next);
|
|
50
|
+
}, []);
|
|
51
|
+
const sendNext = (0, import_react.useCallback)((item) => {
|
|
52
|
+
busySessionsRef.current.add(item.sessionId);
|
|
53
|
+
updateQueue((current) => current.filter((queued) => queued.id !== item.id));
|
|
54
|
+
void Promise.resolve().then(() => callbacksRef.current.send(item.payload, item.sessionId)).catch(() => {
|
|
55
|
+
}).finally(() => {
|
|
56
|
+
busySessionsRef.current.delete(item.sessionId);
|
|
57
|
+
setDrainTick((tick) => tick + 1);
|
|
58
|
+
});
|
|
59
|
+
}, [updateQueue]);
|
|
60
|
+
const sendOrQueue = (0, import_react.useCallback)((payload, preview = "") => {
|
|
61
|
+
if (!sessionId || !enabled)
|
|
62
|
+
return;
|
|
63
|
+
const item = { id: (0, import_uuid.v4)(), sessionId, preview, payload };
|
|
64
|
+
if (loadingRef.current || busySessionsRef.current.has(sessionId) || interruptingRef.current || queueRef.current.some((queued) => queued.sessionId === sessionId)) {
|
|
65
|
+
updateQueue((current) => [...current, item]);
|
|
66
|
+
} else {
|
|
67
|
+
sendNext(item);
|
|
68
|
+
}
|
|
69
|
+
}, [enabled, sessionId, sendNext, updateQueue]);
|
|
70
|
+
const removeQueuedMessage = (0, import_react.useCallback)((id) => {
|
|
71
|
+
updateQueue((current) => current.filter((item) => item.id !== id));
|
|
72
|
+
}, [updateQueue]);
|
|
73
|
+
const sendQueuedMessageNow = (0, import_react.useCallback)(async (id) => {
|
|
74
|
+
var _a, _b;
|
|
75
|
+
const selected = queueRef.current.find((item) => item.id === id && item.sessionId === sessionId);
|
|
76
|
+
if (!selected || interruptingRef.current)
|
|
77
|
+
return;
|
|
78
|
+
interruptingRef.current = true;
|
|
79
|
+
setInterrupting(true);
|
|
80
|
+
updateQueue((current) => [selected, ...current.filter((item) => item.id !== id)]);
|
|
81
|
+
try {
|
|
82
|
+
await ((_b = (_a = callbacksRef.current).interrupt) == null ? void 0 : _b.call(_a, sessionId));
|
|
83
|
+
if (loadingRef.current || busySessionsRef.current.has(sessionId))
|
|
84
|
+
callbacksRef.current.stop();
|
|
85
|
+
} catch {
|
|
86
|
+
} finally {
|
|
87
|
+
interruptingRef.current = false;
|
|
88
|
+
setInterrupting(false);
|
|
89
|
+
setDrainTick((tick) => tick + 1);
|
|
90
|
+
}
|
|
91
|
+
}, [sessionId, updateQueue]);
|
|
92
|
+
(0, import_react.useEffect)(() => {
|
|
93
|
+
if (!enabled || interruptingRef.current)
|
|
94
|
+
return;
|
|
95
|
+
const next = queueRef.current.find(
|
|
96
|
+
(item) => (drainInactiveSessions || item.sessionId === sessionId) && !busySessionsRef.current.has(item.sessionId) && !(item.sessionId === sessionId && loading)
|
|
97
|
+
);
|
|
98
|
+
if (next)
|
|
99
|
+
sendNext(next);
|
|
100
|
+
}, [drainInactiveSessions, drainTick, enabled, loading, queuedMessages, sendNext, sessionId]);
|
|
101
|
+
return { queuedMessages, interrupting, sendOrQueue, removeQueuedMessage, sendQueuedMessageNow };
|
|
102
|
+
}
|
|
103
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
104
|
+
0 && (module.exports = {
|
|
105
|
+
useADKMessageQueue
|
|
106
|
+
});
|
|
107
|
+
//# sourceMappingURL=useADKMessageQueue.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/hooks/useADKMessageQueue.ts"],
|
|
4
|
+
"sourcesContent": ["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { v4 } from \"uuid\";\n\nexport interface ADKQueuedMessage<T> {\n id: string;\n sessionId: string;\n preview: string;\n payload: T;\n}\n\nexport interface ADKMessageQueueOptions<T> {\n sessionId: string;\n loading: boolean;\n send: (payload: T, sessionId: string) => Promise<unknown> | void;\n stop: () => void;\n interrupt?: (sessionId: string) => Promise<unknown> | void;\n enabled?: boolean;\n /** 允许离开会话后继续发送该会话的待发送消息。 */\n drainInactiveSessions?: boolean;\n}\n\n/** 会话级发送队列;只缓存请求,不负责业务 UI 或打断接口的具体实现。 */\nexport function useADKMessageQueue<T>({\n sessionId,\n loading,\n send,\n stop,\n interrupt,\n enabled = true,\n drainInactiveSessions = false,\n}: ADKMessageQueueOptions<T>) {\n const [queuedMessages, setQueuedMessages] = useState<ADKQueuedMessage<T>[]>([]);\n const [interrupting, setInterrupting] = useState(false);\n const [drainTick, setDrainTick] = useState(0);\n const queueRef = useRef(queuedMessages);\n const busySessionsRef = useRef(new Set<string>());\n const loadingRef = useRef(loading);\n const interruptingRef = useRef(false);\n const callbacksRef = useRef({ send, stop, interrupt });\n callbacksRef.current = { send, stop, interrupt };\n loadingRef.current = loading;\n\n const updateQueue = useCallback((update: (current: ADKQueuedMessage<T>[]) => ADKQueuedMessage<T>[]) => {\n const next = update(queueRef.current);\n queueRef.current = next;\n setQueuedMessages(next);\n }, []);\n\n const sendNext = useCallback((item: ADKQueuedMessage<T>) => {\n busySessionsRef.current.add(item.sessionId);\n updateQueue((current) => current.filter((queued) => queued.id !== item.id));\n void Promise.resolve()\n .then(() => callbacksRef.current.send(item.payload, item.sessionId))\n .catch(() => {\n // 发送错误由 transport 处理;队列仍需继续释放当前项。\n })\n .finally(() => {\n busySessionsRef.current.delete(item.sessionId);\n setDrainTick((tick) => tick + 1);\n });\n }, [updateQueue]);\n\n const sendOrQueue = useCallback((payload: T, preview = \"\") => {\n if (!sessionId || !enabled) return;\n const item = { id: v4(), sessionId, preview, payload };\n if (loadingRef.current || busySessionsRef.current.has(sessionId) || interruptingRef.current || queueRef.current.some((queued) => queued.sessionId === sessionId)) {\n updateQueue((current) => [...current, item]);\n } else {\n sendNext(item);\n }\n }, [enabled, sessionId, sendNext, updateQueue]);\n\n const removeQueuedMessage = useCallback((id: string) => {\n updateQueue((current) => current.filter((item) => item.id !== id));\n }, [updateQueue]);\n\n const sendQueuedMessageNow = useCallback(async (id: string) => {\n const selected = queueRef.current.find((item) => item.id === id && item.sessionId === sessionId);\n if (!selected || interruptingRef.current) return;\n interruptingRef.current = true;\n setInterrupting(true);\n updateQueue((current) => [selected, ...current.filter((item) => item.id !== id)]);\n try {\n await callbacksRef.current.interrupt?.(sessionId);\n if (loadingRef.current || busySessionsRef.current.has(sessionId)) callbacksRef.current.stop();\n } catch {\n // 中断失败时维持当前回复;选中的消息仍留在队首等待正常完成。\n } finally {\n interruptingRef.current = false;\n setInterrupting(false);\n setDrainTick((tick) => tick + 1);\n }\n }, [sessionId, updateQueue]);\n\n useEffect(() => {\n if (!enabled || interruptingRef.current) return;\n const next = queueRef.current.find(\n (item) =>\n (drainInactiveSessions || item.sessionId === sessionId) &&\n !busySessionsRef.current.has(item.sessionId) &&\n !(item.sessionId === sessionId && loading)\n );\n if (next) sendNext(next);\n }, [drainInactiveSessions, drainTick, enabled, loading, queuedMessages, sendNext, sessionId]);\n\n return { queuedMessages, interrupting, sendOrQueue, removeQueuedMessage, sendQueuedMessageNow };\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAyD;AACzD,kBAAmB;AAqBZ,SAAS,mBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,wBAAwB;AAC1B,GAA8B;AAC5B,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,uBAAgC,CAAC,CAAC;AAC9E,QAAM,CAAC,cAAc,eAAe,QAAI,uBAAS,KAAK;AACtD,QAAM,CAAC,WAAW,YAAY,QAAI,uBAAS,CAAC;AAC5C,QAAM,eAAW,qBAAO,cAAc;AACtC,QAAM,sBAAkB,qBAAO,oBAAI,IAAY,CAAC;AAChD,QAAM,iBAAa,qBAAO,OAAO;AACjC,QAAM,sBAAkB,qBAAO,KAAK;AACpC,QAAM,mBAAe,qBAAO,EAAE,MAAM,MAAM,UAAU,CAAC;AACrD,eAAa,UAAU,EAAE,MAAM,MAAM,UAAU;AAC/C,aAAW,UAAU;AAErB,QAAM,kBAAc,0BAAY,CAAC,WAAsE;AACrG,UAAM,OAAO,OAAO,SAAS,OAAO;AACpC,aAAS,UAAU;AACnB,sBAAkB,IAAI;AAAA,EACxB,GAAG,CAAC,CAAC;AAEL,QAAM,eAAW,0BAAY,CAAC,SAA8B;AAC1D,oBAAgB,QAAQ,IAAI,KAAK,SAAS;AAC1C,gBAAY,CAAC,YAAY,QAAQ,OAAO,CAAC,WAAW,OAAO,OAAO,KAAK,EAAE,CAAC;AAC1E,SAAK,QAAQ,QAAQ,EAClB,KAAK,MAAM,aAAa,QAAQ,KAAK,KAAK,SAAS,KAAK,SAAS,CAAC,EAClE,MAAM,MAAM;AAAA,IAEb,CAAC,EACA,QAAQ,MAAM;AACb,sBAAgB,QAAQ,OAAO,KAAK,SAAS;AAC7C,mBAAa,CAAC,SAAS,OAAO,CAAC;AAAA,IACjC,CAAC;AAAA,EACL,GAAG,CAAC,WAAW,CAAC;AAEhB,QAAM,kBAAc,0BAAY,CAAC,SAAY,UAAU,OAAO;AAC5D,QAAI,CAAC,aAAa,CAAC;AAAS;AAC5B,UAAM,OAAO,EAAE,QAAI,gBAAG,GAAG,WAAW,SAAS,QAAQ;AACrD,QAAI,WAAW,WAAW,gBAAgB,QAAQ,IAAI,SAAS,KAAK,gBAAgB,WAAW,SAAS,QAAQ,KAAK,CAAC,WAAW,OAAO,cAAc,SAAS,GAAG;AAChK,kBAAY,CAAC,YAAY,CAAC,GAAG,SAAS,IAAI,CAAC;AAAA,IAC7C,OAAO;AACL,eAAS,IAAI;AAAA,IACf;AAAA,EACF,GAAG,CAAC,SAAS,WAAW,UAAU,WAAW,CAAC;AAE9C,QAAM,0BAAsB,0BAAY,CAAC,OAAe;AACtD,gBAAY,CAAC,YAAY,QAAQ,OAAO,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;AAAA,EACnE,GAAG,CAAC,WAAW,CAAC;AAEhB,QAAM,2BAAuB,0BAAY,OAAO,OAAe;AA5EjE;AA6EI,UAAM,WAAW,SAAS,QAAQ,KAAK,CAAC,SAAS,KAAK,OAAO,MAAM,KAAK,cAAc,SAAS;AAC/F,QAAI,CAAC,YAAY,gBAAgB;AAAS;AAC1C,oBAAgB,UAAU;AAC1B,oBAAgB,IAAI;AACpB,gBAAY,CAAC,YAAY,CAAC,UAAU,GAAG,QAAQ,OAAO,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC,CAAC;AAChF,QAAI;AACF,cAAM,wBAAa,SAAQ,cAArB,4BAAiC;AACvC,UAAI,WAAW,WAAW,gBAAgB,QAAQ,IAAI,SAAS;AAAG,qBAAa,QAAQ,KAAK;AAAA,IAC9F,QAAE;AAAA,IAEF,UAAE;AACA,sBAAgB,UAAU;AAC1B,sBAAgB,KAAK;AACrB,mBAAa,CAAC,SAAS,OAAO,CAAC;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,WAAW,WAAW,CAAC;AAE3B,8BAAU,MAAM;AACd,QAAI,CAAC,WAAW,gBAAgB;AAAS;AACzC,UAAM,OAAO,SAAS,QAAQ;AAAA,MAC5B,CAAC,UACE,yBAAyB,KAAK,cAAc,cAC7C,CAAC,gBAAgB,QAAQ,IAAI,KAAK,SAAS,KAC3C,EAAE,KAAK,cAAc,aAAa;AAAA,IACtC;AACA,QAAI;AAAM,eAAS,IAAI;AAAA,EACzB,GAAG,CAAC,uBAAuB,WAAW,SAAS,SAAS,gBAAgB,UAAU,SAAS,CAAC;AAE5F,SAAO,EAAE,gBAAgB,cAAc,aAAa,qBAAqB,qBAAqB;AAChG;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -13,13 +13,15 @@ import XAdkProvider from "./components/XAdkProvider";
|
|
|
13
13
|
import XAdkChatbot from "./components/XAdkChatbot";
|
|
14
14
|
import XAdkSender from "./components/XAdkSender";
|
|
15
15
|
import useADKChat from "./hooks/useADKChat";
|
|
16
|
+
import { useADKMessageQueue } from "./hooks/useADKMessageQueue";
|
|
16
17
|
import { baseChatStrategies, basePreset, baseToolKindResolver, BUILTIN_CHAT_PRESETS, composeChatPresets, DEFAULT_CHAT_PRESET_NAME, defineChatPreset, mergeChatStrategies, resolvePresetUploadRequest, resolveChatPreset, resolvePresetMarkdownExtensions } from "./presets";
|
|
17
18
|
import { extractXGroupKnowledgeReferences, parseXGroupKnowledgeReference, xGroupKnowledgeReferenceMarkdownExtension, xGroupMarkdownExtensions, parseXGroupWebReference, xGroupWebReferenceMarkdownExtension, createXGroupUploadRequest, xGroupAdkPreset, xGroupToolKindResolver } from "./presets/xgroup";
|
|
18
19
|
export { useChatState, useChatActions, useSession, } from "./components/XAdkProvider/context";
|
|
19
20
|
export * from "./types";
|
|
20
21
|
export type { ChatHookResult, ChatHookFactory } from "./types/ChatHook";
|
|
21
22
|
export { useXAi, XAiProvider, XAiChatbot, XAiSDK, XAiSender, XAiConversations, useXAiSDK, request, };
|
|
22
|
-
export { XAdkProvider, XAdkChatbot, XAdkSender, FileGallery, XAdkThoughtChain, useADKChat, formatMarkdownResourceLinksAsText, getMarkdownResourceDisplayLabel, parseMarkdownResourceLinksAsParts, parseMarkdownResourceHref, replaceMarkdownResourceLinks, baseChatStrategies, basePreset, baseToolKindResolver, BUILTIN_CHAT_PRESETS, composeChatPresets, DEFAULT_CHAT_PRESET_NAME, defineChatPreset, createXGroupUploadRequest, mergeChatStrategies, resolvePresetUploadRequest, resolveChatPreset, resolvePresetMarkdownExtensions, extractXGroupKnowledgeReferences, parseXGroupKnowledgeReference, xGroupKnowledgeReferenceMarkdownExtension, xGroupMarkdownExtensions, parseXGroupWebReference, xGroupWebReferenceMarkdownExtension, xGroupAdkPreset, xGroupToolKindResolver, };
|
|
23
|
+
export { XAdkProvider, XAdkChatbot, XAdkSender, FileGallery, XAdkThoughtChain, useADKChat, useADKMessageQueue, formatMarkdownResourceLinksAsText, getMarkdownResourceDisplayLabel, parseMarkdownResourceLinksAsParts, parseMarkdownResourceHref, replaceMarkdownResourceLinks, baseChatStrategies, basePreset, baseToolKindResolver, BUILTIN_CHAT_PRESETS, composeChatPresets, DEFAULT_CHAT_PRESET_NAME, defineChatPreset, createXGroupUploadRequest, mergeChatStrategies, resolvePresetUploadRequest, resolveChatPreset, resolvePresetMarkdownExtensions, extractXGroupKnowledgeReferences, parseXGroupKnowledgeReference, xGroupKnowledgeReferenceMarkdownExtension, xGroupMarkdownExtensions, parseXGroupWebReference, xGroupWebReferenceMarkdownExtension, xGroupAdkPreset, xGroupToolKindResolver, };
|
|
24
|
+
export type { ADKQueuedMessage, ADKMessageQueueOptions, } from "./hooks/useADKMessageQueue";
|
|
23
25
|
export type { XGroupKnowledgeReference, XGroupWebReference, } from "./presets/xgroup";
|
|
24
26
|
import Sources from "./components/Sources";
|
|
25
27
|
export { Sources };
|
package/dist/cjs/index.js
CHANGED
|
@@ -72,6 +72,7 @@ __export(src_exports, {
|
|
|
72
72
|
tokenDefaults: () => import_tokens.tokenDefaults,
|
|
73
73
|
tokens: () => import_tokens.tokens,
|
|
74
74
|
useADKChat: () => import_useADKChat.default,
|
|
75
|
+
useADKMessageQueue: () => import_useADKMessageQueue.useADKMessageQueue,
|
|
75
76
|
useAdkConversation: () => import_useAdkConversation.default,
|
|
76
77
|
useChatActions: () => import_context.useChatActions,
|
|
77
78
|
useChatState: () => import_context.useChatState,
|
|
@@ -100,6 +101,7 @@ var import_XAdkProvider = __toESM(require("./components/XAdkProvider"));
|
|
|
100
101
|
var import_XAdkChatbot = __toESM(require("./components/XAdkChatbot"));
|
|
101
102
|
var import_XAdkSender = __toESM(require("./components/XAdkSender"));
|
|
102
103
|
var import_useADKChat = __toESM(require("./hooks/useADKChat"));
|
|
104
|
+
var import_useADKMessageQueue = require("./hooks/useADKMessageQueue");
|
|
103
105
|
var import_presets = require("./presets");
|
|
104
106
|
var import_xgroup = require("./presets/xgroup");
|
|
105
107
|
var import_context = require("./components/XAdkProvider/context");
|
|
@@ -157,6 +159,7 @@ var import_xgroup2 = require("./presets/xgroup");
|
|
|
157
159
|
tokenDefaults,
|
|
158
160
|
tokens,
|
|
159
161
|
useADKChat,
|
|
162
|
+
useADKMessageQueue,
|
|
160
163
|
useAdkConversation,
|
|
161
164
|
useChatActions,
|
|
162
165
|
useChatState,
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["// index.ts\nimport { useXAi } from \"./context/AiProviderContext\";\nimport XAiProvider from \"./components/XAiProvider\";\nimport XAiChatbot from \"./components/XAiChatbot\";\nimport XAiSDK from \"./components/XAiSDK\";\nimport XAiSender from \"./components/XAiSender\";\nimport FileGallery from \"./components/FileGallery\";\nimport XAiConversations from \"./components/XAiConversations\";\nimport XAdkThoughtChain from \"./components/XAdkThoughtChain\";\nimport useXAiSDK from \"./hooks/useXAiSDK\";\nimport request from \"./utils/request\";\nimport {\n formatMarkdownResourceLinksAsText,\n getMarkdownResourceDisplayLabel,\n parseMarkdownResourceLinksAsParts,\n parseMarkdownResourceHref,\n replaceMarkdownResourceLinks,\n} from \"./utils/markdownResource\";\n\n// 新的 Compound Components 架构\nimport XAdkProvider from \"./components/XAdkProvider\";\nimport XAdkChatbot from \"./components/XAdkChatbot\";\nimport XAdkSender from \"./components/XAdkSender\";\nimport useADKChat from \"./hooks/useADKChat\";\nimport {\n baseChatStrategies,\n basePreset,\n baseToolKindResolver,\n BUILTIN_CHAT_PRESETS,\n composeChatPresets,\n DEFAULT_CHAT_PRESET_NAME,\n defineChatPreset,\n mergeChatStrategies,\n resolvePresetUploadRequest,\n resolveChatPreset,\n resolvePresetMarkdownExtensions,\n} from \"./presets\";\nimport {\n extractXGroupKnowledgeReferences,\n parseXGroupKnowledgeReference,\n xGroupKnowledgeReferenceMarkdownExtension,\n xGroupMarkdownExtensions,\n parseXGroupWebReference,\n xGroupWebReferenceMarkdownExtension,\n createXGroupUploadRequest,\n xGroupAdkPreset,\n xGroupToolKindResolver,\n} from \"./presets/xgroup\";\n\n// 导出新的 Context Hooks\nexport {\n useChatState,\n useChatActions,\n useSession,\n} from \"./components/XAdkProvider/context\";\n\nexport * from \"./types\";\n\n// 导出自定义 Hook 相关类型\nexport type { ChatHookResult, ChatHookFactory } from \"./types/ChatHook\";\n\n// 旧 API - 保持向后兼容\nexport {\n useXAi,\n XAiProvider,\n XAiChatbot,\n XAiSDK,\n XAiSender,\n XAiConversations,\n useXAiSDK,\n request,\n};\n\n// 新 API - 推荐使用\nexport {\n XAdkProvider,\n XAdkChatbot,\n XAdkSender,\n FileGallery,\n XAdkThoughtChain,\n useADKChat,\n formatMarkdownResourceLinksAsText,\n getMarkdownResourceDisplayLabel,\n parseMarkdownResourceLinksAsParts,\n parseMarkdownResourceHref,\n replaceMarkdownResourceLinks,\n baseChatStrategies,\n basePreset,\n baseToolKindResolver,\n BUILTIN_CHAT_PRESETS,\n composeChatPresets,\n DEFAULT_CHAT_PRESET_NAME,\n defineChatPreset,\n createXGroupUploadRequest,\n mergeChatStrategies,\n resolvePresetUploadRequest,\n resolveChatPreset,\n resolvePresetMarkdownExtensions,\n extractXGroupKnowledgeReferences,\n parseXGroupKnowledgeReference,\n xGroupKnowledgeReferenceMarkdownExtension,\n xGroupMarkdownExtensions,\n parseXGroupWebReference,\n xGroupWebReferenceMarkdownExtension,\n xGroupAdkPreset,\n xGroupToolKindResolver,\n};\nexport type {\n XGroupKnowledgeReference,\n XGroupWebReference,\n} from \"./presets/xgroup\";\n\n// Sources 来源引用组件\nimport Sources from \"./components/Sources\";\nexport { Sources };\nexport type { SourcesProps, SourcesItem, SourcesRef } from \"./types/Sources\";\n\n// FolderTree 文件树组件\nimport FolderTree from \"./components/FolderTree\";\nexport { FolderTree };\nexport type {\n FolderTreeProps,\n FolderTreeData,\n FileContentService,\n FolderTreeRef,\n} from \"./components/FolderTree\";\n\n// 基础组件导出 - 供高级用户和业务侧使用\nexport { default as MarkdownRender } from \"./components/XAdkChatbot/components/MarkdownRender\";\nexport { default as FunctionCallRender } from \"./components/XAdkChatbot/components/FunctionCallRender\";\nexport { default as ThinkRender } from \"./components/XAdkChatbot/components/ThinkRender\";\n\n// 基础组件类型导出\nexport type { MarkdownRenderProps } from \"./components/XAdkChatbot/components/MarkdownRender\";\nexport type { FunctionCallRenderProps } from \"./types/FunctionCallRender\";\nexport type {\n XAdkThoughtChainProps,\n ThoughtChainItemType,\n ThoughtChainStatus,\n} from \"./types/XAdkThoughtChain\";\n\n// 设计令牌导出 - 供引用方覆盖样式\nexport { tokens, tokenDefaults, token, cssVarStyle } from \"./styles/tokens\";\n\n// Headless ADK data-flow APIs\nexport * from \"./core\";\nexport { default as useAdkConversation } from \"./react/useAdkConversation\";\nexport type { UseAdkConversationResult } from \"./react/useAdkConversation\";\nexport { createXGroupOpenApiTransport } from \"./presets/xgroup\";\nexport type { XGroupOpenApiTransportOptions } from \"./presets/xgroup\";\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA,wCAAAA;AAAA,EAAA,oCAAAC;AAAA,EAAA;AAAA;AAAA,gCAAAC;AAAA,EAAA;AAAA,wCAAAC;AAAA,EAAA,wCAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,gDAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,gDAAAC;AAAA,EAAA,sCAAAC;AAAA,EAAA,4BAAAC;AAAA,EAAA,kCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,+BAAuB;AACvB,yBAAwB;AACxB,wBAAuB;AACvB,oBAAmB;AACnB,uBAAsB;AACtB,yBAAwB;AACxB,8BAA6B;AAC7B,8BAA6B;AAC7B,uBAAsB;AACtB,qBAAoB;AACpB,8BAMO;AAGP,0BAAyB;AACzB,yBAAwB;AACxB,wBAAuB;AACvB,wBAAuB;AACvB,qBAYO;AACP,oBAUO;AAGP,qBAIO;AAEP,wBAAc,
|
|
4
|
+
"sourcesContent": ["// index.ts\nimport { useXAi } from \"./context/AiProviderContext\";\nimport XAiProvider from \"./components/XAiProvider\";\nimport XAiChatbot from \"./components/XAiChatbot\";\nimport XAiSDK from \"./components/XAiSDK\";\nimport XAiSender from \"./components/XAiSender\";\nimport FileGallery from \"./components/FileGallery\";\nimport XAiConversations from \"./components/XAiConversations\";\nimport XAdkThoughtChain from \"./components/XAdkThoughtChain\";\nimport useXAiSDK from \"./hooks/useXAiSDK\";\nimport request from \"./utils/request\";\nimport {\n formatMarkdownResourceLinksAsText,\n getMarkdownResourceDisplayLabel,\n parseMarkdownResourceLinksAsParts,\n parseMarkdownResourceHref,\n replaceMarkdownResourceLinks,\n} from \"./utils/markdownResource\";\n\n// 新的 Compound Components 架构\nimport XAdkProvider from \"./components/XAdkProvider\";\nimport XAdkChatbot from \"./components/XAdkChatbot\";\nimport XAdkSender from \"./components/XAdkSender\";\nimport useADKChat from \"./hooks/useADKChat\";\nimport { useADKMessageQueue } from \"./hooks/useADKMessageQueue\";\nimport {\n baseChatStrategies,\n basePreset,\n baseToolKindResolver,\n BUILTIN_CHAT_PRESETS,\n composeChatPresets,\n DEFAULT_CHAT_PRESET_NAME,\n defineChatPreset,\n mergeChatStrategies,\n resolvePresetUploadRequest,\n resolveChatPreset,\n resolvePresetMarkdownExtensions,\n} from \"./presets\";\nimport {\n extractXGroupKnowledgeReferences,\n parseXGroupKnowledgeReference,\n xGroupKnowledgeReferenceMarkdownExtension,\n xGroupMarkdownExtensions,\n parseXGroupWebReference,\n xGroupWebReferenceMarkdownExtension,\n createXGroupUploadRequest,\n xGroupAdkPreset,\n xGroupToolKindResolver,\n} from \"./presets/xgroup\";\n\n// 导出新的 Context Hooks\nexport {\n useChatState,\n useChatActions,\n useSession,\n} from \"./components/XAdkProvider/context\";\n\nexport * from \"./types\";\n\n// 导出自定义 Hook 相关类型\nexport type { ChatHookResult, ChatHookFactory } from \"./types/ChatHook\";\n\n// 旧 API - 保持向后兼容\nexport {\n useXAi,\n XAiProvider,\n XAiChatbot,\n XAiSDK,\n XAiSender,\n XAiConversations,\n useXAiSDK,\n request,\n};\n\n// 新 API - 推荐使用\nexport {\n XAdkProvider,\n XAdkChatbot,\n XAdkSender,\n FileGallery,\n XAdkThoughtChain,\n useADKChat,\n useADKMessageQueue,\n formatMarkdownResourceLinksAsText,\n getMarkdownResourceDisplayLabel,\n parseMarkdownResourceLinksAsParts,\n parseMarkdownResourceHref,\n replaceMarkdownResourceLinks,\n baseChatStrategies,\n basePreset,\n baseToolKindResolver,\n BUILTIN_CHAT_PRESETS,\n composeChatPresets,\n DEFAULT_CHAT_PRESET_NAME,\n defineChatPreset,\n createXGroupUploadRequest,\n mergeChatStrategies,\n resolvePresetUploadRequest,\n resolveChatPreset,\n resolvePresetMarkdownExtensions,\n extractXGroupKnowledgeReferences,\n parseXGroupKnowledgeReference,\n xGroupKnowledgeReferenceMarkdownExtension,\n xGroupMarkdownExtensions,\n parseXGroupWebReference,\n xGroupWebReferenceMarkdownExtension,\n xGroupAdkPreset,\n xGroupToolKindResolver,\n};\nexport type {\n ADKQueuedMessage,\n ADKMessageQueueOptions,\n} from \"./hooks/useADKMessageQueue\";\nexport type {\n XGroupKnowledgeReference,\n XGroupWebReference,\n} from \"./presets/xgroup\";\n\n// Sources 来源引用组件\nimport Sources from \"./components/Sources\";\nexport { Sources };\nexport type { SourcesProps, SourcesItem, SourcesRef } from \"./types/Sources\";\n\n// FolderTree 文件树组件\nimport FolderTree from \"./components/FolderTree\";\nexport { FolderTree };\nexport type {\n FolderTreeProps,\n FolderTreeData,\n FileContentService,\n FolderTreeRef,\n} from \"./components/FolderTree\";\n\n// 基础组件导出 - 供高级用户和业务侧使用\nexport { default as MarkdownRender } from \"./components/XAdkChatbot/components/MarkdownRender\";\nexport { default as FunctionCallRender } from \"./components/XAdkChatbot/components/FunctionCallRender\";\nexport { default as ThinkRender } from \"./components/XAdkChatbot/components/ThinkRender\";\n\n// 基础组件类型导出\nexport type { MarkdownRenderProps } from \"./components/XAdkChatbot/components/MarkdownRender\";\nexport type { FunctionCallRenderProps } from \"./types/FunctionCallRender\";\nexport type {\n XAdkThoughtChainProps,\n ThoughtChainItemType,\n ThoughtChainStatus,\n} from \"./types/XAdkThoughtChain\";\n\n// 设计令牌导出 - 供引用方覆盖样式\nexport { tokens, tokenDefaults, token, cssVarStyle } from \"./styles/tokens\";\n\n// Headless ADK data-flow APIs\nexport * from \"./core\";\nexport { default as useAdkConversation } from \"./react/useAdkConversation\";\nexport type { UseAdkConversationResult } from \"./react/useAdkConversation\";\nexport { createXGroupOpenApiTransport } from \"./presets/xgroup\";\nexport type { XGroupOpenApiTransportOptions } from \"./presets/xgroup\";\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA,wCAAAA;AAAA,EAAA,oCAAAC;AAAA,EAAA;AAAA;AAAA,gCAAAC;AAAA,EAAA;AAAA,wCAAAC;AAAA,EAAA,wCAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,gDAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,gDAAAC;AAAA,EAAA,sCAAAC;AAAA,EAAA,4BAAAC;AAAA,EAAA,kCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,+BAAuB;AACvB,yBAAwB;AACxB,wBAAuB;AACvB,oBAAmB;AACnB,uBAAsB;AACtB,yBAAwB;AACxB,8BAA6B;AAC7B,8BAA6B;AAC7B,uBAAsB;AACtB,qBAAoB;AACpB,8BAMO;AAGP,0BAAyB;AACzB,yBAAwB;AACxB,wBAAuB;AACvB,wBAAuB;AACvB,gCAAmC;AACnC,qBAYO;AACP,oBAUO;AAGP,qBAIO;AAEP,wBAAc,oBAzDd;AAuHA,qBAAoB;AAKpB,wBAAuB;AAUvB,4BAA0C;AAC1C,gCAA8C;AAC9C,yBAAuC;AAYvC,oBAA0D;AAG1D,wBAAc,mBAvJd;AAwJA,gCAA8C;AAE9C,IAAAC,iBAA6C;",
|
|
6
6
|
"names": ["FileGallery", "FolderTree", "Sources", "XAdkChatbot", "XAdkProvider", "XAdkSender", "XAdkThoughtChain", "XAiChatbot", "XAiConversations", "XAiProvider", "XAiSDK", "XAiSender", "request", "useADKChat", "useXAiSDK", "import_xgroup"]
|
|
7
7
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export { default as useAdkConversation } from "./useAdkConversation";
|
|
2
2
|
export type { UseAdkConversationResult } from "./useAdkConversation";
|
|
3
3
|
export { default as useADKChat } from "../hooks/useADKChat";
|
|
4
|
+
export { useADKMessageQueue } from "../hooks/useADKMessageQueue";
|
|
5
|
+
export type { ADKQueuedMessage, ADKMessageQueueOptions } from "../hooks/useADKMessageQueue";
|
|
4
6
|
export { default as useEventStreamRequest } from "../hooks/useEventStreamRequest";
|
|
5
7
|
export { useChatActions, useChatState, useSession, } from "../components/XAdkProvider/context";
|
|
6
8
|
export type { ChatHookFactory, ChatHookResult } from "../types/ChatHook";
|
package/dist/cjs/react/index.js
CHANGED
|
@@ -30,6 +30,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
30
30
|
var react_exports = {};
|
|
31
31
|
__export(react_exports, {
|
|
32
32
|
useADKChat: () => import_useADKChat.default,
|
|
33
|
+
useADKMessageQueue: () => import_useADKMessageQueue.useADKMessageQueue,
|
|
33
34
|
useAdkConversation: () => import_useAdkConversation.default,
|
|
34
35
|
useChatActions: () => import_context.useChatActions,
|
|
35
36
|
useChatState: () => import_context.useChatState,
|
|
@@ -39,11 +40,13 @@ __export(react_exports, {
|
|
|
39
40
|
module.exports = __toCommonJS(react_exports);
|
|
40
41
|
var import_useAdkConversation = __toESM(require("./useAdkConversation"));
|
|
41
42
|
var import_useADKChat = __toESM(require("../hooks/useADKChat"));
|
|
43
|
+
var import_useADKMessageQueue = require("../hooks/useADKMessageQueue");
|
|
42
44
|
var import_useEventStreamRequest = __toESM(require("../hooks/useEventStreamRequest"));
|
|
43
45
|
var import_context = require("../components/XAdkProvider/context");
|
|
44
46
|
// Annotate the CommonJS export names for ESM import in node:
|
|
45
47
|
0 && (module.exports = {
|
|
46
48
|
useADKChat,
|
|
49
|
+
useADKMessageQueue,
|
|
47
50
|
useAdkConversation,
|
|
48
51
|
useChatActions,
|
|
49
52
|
useChatState,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/react/index.ts"],
|
|
4
|
-
"sourcesContent": ["export { default as useAdkConversation } from \"./useAdkConversation\";\nexport type { UseAdkConversationResult } from \"./useAdkConversation\";\nexport { default as useADKChat } from \"@/hooks/useADKChat\";\nexport { default as useEventStreamRequest } from \"@/hooks/useEventStreamRequest\";\nexport {\n useChatActions,\n useChatState,\n useSession,\n} from \"@/components/XAdkProvider/context\";\nexport type { ChatHookFactory, ChatHookResult } from \"@/types/ChatHook\";\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAA8C;AAE9C,wBAAsC;AACtC,mCAAiD;AACjD,qBAIO;",
|
|
4
|
+
"sourcesContent": ["export { default as useAdkConversation } from \"./useAdkConversation\";\nexport type { UseAdkConversationResult } from \"./useAdkConversation\";\nexport { default as useADKChat } from \"@/hooks/useADKChat\";\nexport { useADKMessageQueue } from \"@/hooks/useADKMessageQueue\";\nexport type { ADKQueuedMessage, ADKMessageQueueOptions } from \"@/hooks/useADKMessageQueue\";\nexport { default as useEventStreamRequest } from \"@/hooks/useEventStreamRequest\";\nexport {\n useChatActions,\n useChatState,\n useSession,\n} from \"@/components/XAdkProvider/context\";\nexport type { ChatHookFactory, ChatHookResult } from \"@/types/ChatHook\";\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAA8C;AAE9C,wBAAsC;AACtC,gCAAmC;AAEnC,mCAAiD;AACjD,qBAIO;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -10,6 +10,12 @@ import { type ChatPresetInput, type ChatStrategies } from "./ChatStrategies";
|
|
|
10
10
|
export interface XAdkChatbotHandle {
|
|
11
11
|
/** 手动滚动到底部 */
|
|
12
12
|
scrollToBottom: (behavior?: ScrollBehavior) => void;
|
|
13
|
+
/** 当前消息列表的滚动容器 */
|
|
14
|
+
getScrollContainer: () => HTMLDivElement | null;
|
|
15
|
+
/** 消息组相对滚动容器顶部的位置 */
|
|
16
|
+
getMessagePosition: (messageId: string) => number | null;
|
|
17
|
+
/** 滚动到指定消息组 */
|
|
18
|
+
scrollToMessage: (messageId: string, behavior?: ScrollBehavior) => void;
|
|
13
19
|
}
|
|
14
20
|
/**
|
|
15
21
|
* 消息分组接口
|
|
@@ -23,6 +29,32 @@ export interface ChatGroup {
|
|
|
23
29
|
/** 点赞状态: 1=赞, -1=踩, 0=未反馈 */
|
|
24
30
|
isLike?: number;
|
|
25
31
|
}
|
|
32
|
+
/** 自定义消息流内容的定位上下文。按分组而非数组下标锚定,分页 prepend 后仍可稳定定位。 */
|
|
33
|
+
export interface ChatGroupRenderContext {
|
|
34
|
+
group: ChatGroup;
|
|
35
|
+
index: number;
|
|
36
|
+
previousGroup?: ChatGroup;
|
|
37
|
+
nextGroup?: ChatGroup;
|
|
38
|
+
}
|
|
39
|
+
/** 受控历史消息分页。不传时一次性展示 messages,保持原有行为。 */
|
|
40
|
+
export interface ChatHistoryPagination {
|
|
41
|
+
/** 是否仍有下一页;历史消息通常从顶部加载更早内容。 */
|
|
42
|
+
hasMore: boolean;
|
|
43
|
+
loading?: boolean;
|
|
44
|
+
/** top 加载更早消息,bottom 可用于正序列表加载后续内容。默认 top。 */
|
|
45
|
+
direction?: "top" | "bottom";
|
|
46
|
+
/** 距离指定边缘多少像素时触发加载,默认 80。 */
|
|
47
|
+
threshold?: number;
|
|
48
|
+
/** 使用方负责请求并合并 messages;建议以稳定消息 id 去重。 */
|
|
49
|
+
onLoadMore: (context: {
|
|
50
|
+
signal: AbortSignal;
|
|
51
|
+
}) => Promise<void>;
|
|
52
|
+
/** 可选的显式刷新操作;SDK 只触发回调,不规定请求方式。 */
|
|
53
|
+
onRefresh?: (context: {
|
|
54
|
+
signal: AbortSignal;
|
|
55
|
+
}) => Promise<void>;
|
|
56
|
+
refreshing?: boolean;
|
|
57
|
+
}
|
|
26
58
|
export interface IInvocation {
|
|
27
59
|
id: string;
|
|
28
60
|
name: string;
|
|
@@ -229,6 +261,9 @@ export type ActionExtraProps = (data: {
|
|
|
229
261
|
message: ChatGroup;
|
|
230
262
|
isLastBotMsg: boolean;
|
|
231
263
|
}) => ReactNode;
|
|
264
|
+
export type UserActionProps = (data: {
|
|
265
|
+
message: ChatGroup;
|
|
266
|
+
}) => ReactNode | null;
|
|
232
267
|
export interface MarkdownResourceLink {
|
|
233
268
|
/** 完整链接,如 skill://InnerSkill01 */
|
|
234
269
|
href: string;
|
|
@@ -292,6 +327,16 @@ export interface XAdkChatbotProps extends Partial<XAdkSenderProps> {
|
|
|
292
327
|
loading?: boolean;
|
|
293
328
|
/** 消息列表 */
|
|
294
329
|
messages: IMessage[];
|
|
330
|
+
/** 在消息组前插入自定义模块,适合系统提示、日期或分支分界线。 */
|
|
331
|
+
renderBeforeGroup?: (context: ChatGroupRenderContext) => ReactNode;
|
|
332
|
+
/** 在消息组后插入自定义模块,适合与某轮回复关联的业务内容。 */
|
|
333
|
+
renderAfterGroup?: (context: ChatGroupRenderContext) => ReactNode;
|
|
334
|
+
/** 基于组内数据替换默认消息展示;返回 undefined 时沿用默认展示,null 表示隐藏。 */
|
|
335
|
+
renderGroup?: (context: ChatGroupRenderContext & {
|
|
336
|
+
defaultNode: ReactNode;
|
|
337
|
+
}) => ReactNode | undefined;
|
|
338
|
+
/** 按需加载消息。不传时仍一次性展示传入的全部 messages。 */
|
|
339
|
+
history?: ChatHistoryPagination;
|
|
295
340
|
/** 开场白 */
|
|
296
341
|
prologue?: string;
|
|
297
342
|
/** 建议回复 */
|
|
@@ -384,4 +429,8 @@ export interface XAdkChatbotProps extends Partial<XAdkSenderProps> {
|
|
|
384
429
|
markdownExtensions?: readonly MarkdownExtension[];
|
|
385
430
|
/** 消息列表为空时展示的自定义空状态组件 */
|
|
386
431
|
empty?: ReactNode | (() => ReactNode);
|
|
432
|
+
/** 是否启用用户消息 hover 操作栏(时间 + 复制),默认 false */
|
|
433
|
+
showUserActions?: boolean;
|
|
434
|
+
/** 用户消息自定义操作栏渲染,返回 null 则降级使用默认渲染 */
|
|
435
|
+
userActions?: UserActionProps;
|
|
387
436
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/types/XAdkChatbot.ts"],
|
|
4
|
-
"sourcesContent": ["import type { CSSProperties, JSX, ReactNode } from \"react\";\nimport { type XAdkSenderProps } from \"./XAdkSender\";\nimport { type SendContent } from \"./XAiSender\";\nimport { type FileItem } from \"./FileGallery\";\nimport { type ToolRenderKind } from \"./FunctionCallRender\";\nimport { type ChatPresetInput, type ChatStrategies } from \"./ChatStrategies\";\n\n/**\n * XAdkChatbot 命令式 API\n */\nexport interface XAdkChatbotHandle {\n /** 手动滚动到底部 */\n scrollToBottom: (behavior?: ScrollBehavior) => void;\n}\n\n/**\n * 消息分组接口\n */\nexport interface ChatGroup {\n id: string;\n role: \"user\" | \"bot\";\n msgs: IMessage[];\n invocationId?: string;\n allFiles: any[];\n /** 点赞状态: 1=赞, -1=踩, 0=未反馈 */\n isLike?: number;\n}\n\nexport interface IInvocation {\n id: string;\n name: string;\n spanId: string;\n traceId: string;\n parentSpanId: string;\n startTime: number;\n endTime: number;\n sessionId: string;\n invocationId: string;\n duration: number;\n attributes: Record<string, string>;\n botName: string;\n workspaceNo: string;\n status: number;\n agentName: string;\n agentNo: string;\n agentVersionNo: string;\n userId: string;\n}\n\nexport interface AgentRunRequest {\n stream?: boolean;\n sessionId: string | undefined;\n content: {\n parts: Array<{\n text?: string;\n functionResponse?: {\n id?: string;\n name?: string;\n response?: any;\n };\n }>;\n role: string;\n };\n files?: Array<{\n fileName: string;\n fileId?: string;\n tempUrl: string;\n type?: string;\n mimeType: string;\n }>;\n stateDelta?: any;\n}\nexport interface Blob {\n displayName?: string;\n mimeType?: string;\n data: string;\n}\n\nexport interface FunctionCall {\n id?: string;\n name: string;\n args: { [key: string]: any };\n}\n\nexport interface FunctionResponse {\n id?: string;\n name: string;\n response: { [key: string]: any };\n}\n\nexport interface FileData {\n displayName: string;\n mimeType: string;\n fileUri: string;\n}\n\nexport interface ExecutableCode {\n language: \"UNKNOWN\" | \"PYTHON\";\n code: string;\n}\n\nexport interface CodeExecutionResult {\n outcome: \"UNKNOWN\" | \"OK\" | \"FAILED\" | \"DEADLINE_EXCEEDED\";\n output: string;\n}\n\nexport interface Part {\n text?: string;\n inlineData?: Blob;\n functionCall?: FunctionCall;\n functionResponse?: FunctionResponse;\n thought?: boolean;\n fileData?: FileData;\n executableCode?: ExecutableCode;\n codeExecutionResult?: CodeExecutionResult;\n errorMessage?: string;\n}\n\nexport interface GenAiContent {\n role: string;\n parts: Part[];\n}\n\nexport interface LlmRequest {\n contents: GenAiContent[];\n}\n\nexport interface LlmResponse {\n partial?: boolean;\n content: GenAiContent;\n error?: string;\n errorMessage?: string;\n errorCode?: string;\n longRunningToolIds?: string[];\n}\n\nexport interface UsageMetadata {\n candidatesTokenCount?: number;\n promptTokenCount?: number;\n totalTokenCount?: number;\n [key: string]: any;\n}\n\nexport interface EventActions {\n message?: string;\n artifactDelta?: any;\n functionCall?: FunctionCall;\n functionResponse?: FunctionResponse;\n finishReason?: string;\n}\n\nexport interface Event extends LlmResponse {\n id?: string;\n author?: string;\n modelCode?: string;\n invocationId?: string;\n actions?: EventActions;\n longRunningToolIds?: string[];\n branch?: string;\n timestamp?: number;\n finishReason?: string;\n usageMetadata?: UsageMetadata;\n evalStatus?: any;\n failedMetric?: any;\n evalScore?: any;\n evalThreshold?: any;\n groundingMetadata?: {\n searchEntryPoint?: {\n renderedContent?: any;\n };\n };\n isLike?: number;\n sessionId?: string;\n}\n\nexport interface SessionState {\n [key: string]: unknown;\n}\n\nexport interface Session {\n id?: string;\n appName?: string;\n userId?: string;\n state?: SessionState;\n events?: Event[];\n lastUpdateTime?: number;\n}\n\nexport interface TimeTick {\n position: number;\n label: string;\n}\n\nexport interface IMessage {\n /** 前端生成的唯一标识 */\n id: string;\n /** 单次请求的唯一标识 */\n invocationId?: string;\n /** 单个Event的唯一标识,一个event里有可能有多个parts的消息 */\n eventId?: string;\n /** 消息发起人:智能体名称、user */\n author?: string;\n role: \"bot\" | \"user\";\n /** 时间戳 */\n timestamp?: number;\n isLoading?: boolean;\n /** 函数调用 */\n functionCall?: FunctionCall;\n /** 函数调用结果 */\n functionResponse?: FunctionResponse;\n /** 文件上传 */\n inlineData?: Blob;\n /** 文本消息 */\n text?: string;\n /** 文件信息 */\n fileData?: FileData[];\n /** 思考 */\n thought?: boolean;\n executableCode?: ExecutableCode;\n codeExecutionResult?: CodeExecutionResult;\n renderedContent?: any;\n /** 原始数据 */\n raw?: any;\n /** 模型编码,通常来自 stream 事件或历史消息 */\n modelCode?: string;\n /** 事件级 token 使用量等模型调用元数据 */\n usageMetadata?: UsageMetadata;\n /** 结束原因,通常来自最后一条 stream 事件 */\n finishReason?: string;\n // 下面暂时没有用到\n evalStatus?: any;\n failedMetric?: any;\n evalScore?: any;\n evalThreshold?: any;\n invocationIndex?: any;\n finalResponsePartIndex?: any;\n toolUseIndex?: any;\n /** 是否赞/踩 */\n isLike?: number;\n}\n\nexport type ActionProps = (data: {\n message: ChatGroup;\n isLastBotMsg: boolean;\n}) => JSX.Element | null;\n\nexport type ActionExtraProps = (data: {\n message: ChatGroup;\n isLastBotMsg: boolean;\n}) => ReactNode;\n\nexport interface MarkdownResourceLink {\n /** 完整链接,如 skill://InnerSkill01 */\n href: string;\n /** Markdown 链接文字,如 @skill-creator */\n label: string;\n /** 协议类型,如 skill/plugin/knowledge */\n type: string;\n /** 协议值,如 InnerSkill01 */\n value: string;\n}\n\nexport type RenderMarkdownResourceLink = (\n link: MarkdownResourceLink,\n) => ReactNode | null;\n\n/**\n * 自定义工具调用渲染函数\n * - 返回 ReactNode:使用自定义渲染\n * - 返回 null:降级使用默认渲染\n *\n * @example\n * renderFunctionCall={(msg) => {\n * if (msg.functionCall?.name === 'my_tool') return <MyToolRender msg={msg} />;\n * return null; // 其他工具使用默认渲染\n * }}\n */\nexport type RenderFunctionCall = (msg: IMessage) => ReactNode | null;\n\n/** Markdown 自定义标签经过安全过滤后的结构化节点。 */\nexport interface MarkdownExtensionNode {\n tagName: string;\n attributes: Readonly<Record<string, string>>;\n text: string;\n children: ReactNode;\n}\n\n/**\n * Markdown 自定义标签扩展。\n * 标签及属性只有显式注册后才会交给渲染函数,业务协议无需进入 SDK 核心。\n */\nexport interface MarkdownExtension {\n tagName: string;\n allowedAttributes?: readonly string[];\n render: (node: MarkdownExtensionNode) => ReactNode | null;\n}\n\nexport interface XAdkChatbotProps extends Partial<XAdkSenderProps> {\n /**\n * 自定义工具调用渲染函数\n * 返回 null 则降级使用默认渲染\n */\n renderFunctionCall?: RenderFunctionCall;\n /**\n * 工具名 → 渲染类型的解析策略,默认使用 defaultToolKindResolver\n */\n toolKindResolver?: (name: string | undefined) => ToolRenderKind;\n /**\n * 聊天策略,可由 Provider preset 自动下发,也可在组件局部覆盖。\n */\n strategies?: ChatStrategies;\n /**\n * 组件直用时的协议预设。默认沿用 xgroup-adk 以兼容既有业务接入;\n * 需要中立行为时可传入 base。\n */\n preset?: ChatPresetInput;\n className?: string;\n style?: CSSProperties;\n // 加载状态\n loading?: boolean;\n /** 消息列表 */\n messages: IMessage[];\n /** 开场白 */\n prologue?: string;\n /** 建议回复 */\n suggestions?: string[];\n /** 欢迎页面 */\n welcome?: ReactNode;\n /** 显示函数调用详情 */\n showFnCallDetail?: boolean;\n /**\n * 数据是否就绪,就绪后触发首次自动滚底。默认 true。\n * 仅在需要等待异步加载历史消息的场景(如 XAdkProvider 内)才需设为 false,\n * 待数据加载完成后再切换为 true;独立使用时无需关心此属性。\n */\n initialized?: boolean;\n /**\n * 当前会话 ID,切换时自动重置滚动状态并置底。\n * 不传则退化为仅依赖 initialized 的单次置底行为。\n */\n sessionId?: string;\n /** 提交回调 */\n onSubmit?: ({ text, files }: SendContent) => void;\n /** 函数调用确认回调 */\n onConfirm?: (fnCall: FunctionCall, confirmed: boolean) => void;\n /** 停止回调 */\n onStop?: () => void;\n /** 清除回调 */\n onClear?: () => void;\n /** 建议回复回调 */\n onSuggest?: (text: string) => void;\n\n // ========== 新增功能 ==========\n\n /** Agent 名称 (欢迎页面) */\n agentName?: string;\n /** Agent 图标 (欢迎页面) */\n agentIcon?: string;\n /** Agent 描述 (欢迎页面) */\n description?: string;\n\n /** 是否显示重试按钮 */\n showRetry?: boolean;\n /** 是否显示复制按钮 */\n showCopy?: boolean;\n /** 是否显示日志按钮 */\n showLog?: boolean;\n\n /** 重试回调 */\n onRetry?: () => void;\n /** 复制回调 */\n onCopy?: (text: string) => void;\n /** 查看日志回调 */\n onShowLog?: (invocationId: string, timestamp?: number) => void;\n\n /** 是否启用消息分组 (默认 true) */\n enableGrouping?: boolean;\n\n /** 是否自动解析 process 内容并展示思维链 (默认 true) */\n enableProcessParsing?: boolean;\n\n /** 消息功能区 */\n actions?: ActionProps;\n /** 追加在消息功能区之后的内容,适合展示 token 消耗等业务扩展信息 */\n actionsExtra?: ActionExtraProps;\n\n /**\n * Process 解析选项\n * @example\n * // 业务项目格式 (注释模式)\n * parseOptions={{ mode: 'comment' }}\n *\n * @example\n * // 自定义格式\n * parseOptions={{\n * mode: 'custom',\n * customPatterns: [\n * { regex: /\\[REASONING\\]([\\s\\S]*?)\\[\\/REASONING\\]/g, type: 'reasoning' }\n * ]\n * }}\n */\n parseOptions?: {\n mode?: \"xml\" | \"comment\" | \"custom\";\n customPatterns?: Array<{ regex: RegExp; type: string }>;\n finalMarker?: string;\n };\n\n /** 是否禁用输入 */\n disabled?: boolean;\n\n /** 是否流式响应 */\n stream?: boolean;\n\n /** 点击对话中附件卡片的回调(非图片、非音视频文件) */\n onFileClick?: (file: FileItem) => void;\n\n /** 点击 Markdown 资源链接标签的回调,如 [@skill](skill://xxx) */\n onResourceLinkClick?: (link: MarkdownResourceLink) => void;\n\n /** 自定义 Markdown 资源链接渲染,返回 null 则降级使用默认标签样式 */\n renderResourceLink?: RenderMarkdownResourceLink;\n\n /** Markdown/XML 自定义标签扩展 */\n markdownExtensions?: readonly MarkdownExtension[];\n\n /** 消息列表为空时展示的自定义空状态组件 */\n empty?: ReactNode | (() => ReactNode);\n}\n"],
|
|
4
|
+
"sourcesContent": ["import type { CSSProperties, JSX, ReactNode } from \"react\";\nimport { type XAdkSenderProps } from \"./XAdkSender\";\nimport { type SendContent } from \"./XAiSender\";\nimport { type FileItem } from \"./FileGallery\";\nimport { type ToolRenderKind } from \"./FunctionCallRender\";\nimport { type ChatPresetInput, type ChatStrategies } from \"./ChatStrategies\";\n\n/**\n * XAdkChatbot 命令式 API\n */\nexport interface XAdkChatbotHandle {\n /** 手动滚动到底部 */\n scrollToBottom: (behavior?: ScrollBehavior) => void;\n /** 当前消息列表的滚动容器 */\n getScrollContainer: () => HTMLDivElement | null;\n /** 消息组相对滚动容器顶部的位置 */\n getMessagePosition: (messageId: string) => number | null;\n /** 滚动到指定消息组 */\n scrollToMessage: (messageId: string, behavior?: ScrollBehavior) => void;\n}\n\n/**\n * 消息分组接口\n */\nexport interface ChatGroup {\n id: string;\n role: \"user\" | \"bot\";\n msgs: IMessage[];\n invocationId?: string;\n allFiles: any[];\n /** 点赞状态: 1=赞, -1=踩, 0=未反馈 */\n isLike?: number;\n}\n\n/** 自定义消息流内容的定位上下文。按分组而非数组下标锚定,分页 prepend 后仍可稳定定位。 */\nexport interface ChatGroupRenderContext {\n group: ChatGroup;\n index: number;\n previousGroup?: ChatGroup;\n nextGroup?: ChatGroup;\n}\n\n/** 受控历史消息分页。不传时一次性展示 messages,保持原有行为。 */\nexport interface ChatHistoryPagination {\n /** 是否仍有下一页;历史消息通常从顶部加载更早内容。 */\n hasMore: boolean;\n loading?: boolean;\n /** top 加载更早消息,bottom 可用于正序列表加载后续内容。默认 top。 */\n direction?: \"top\" | \"bottom\";\n /** 距离指定边缘多少像素时触发加载,默认 80。 */\n threshold?: number;\n /** 使用方负责请求并合并 messages;建议以稳定消息 id 去重。 */\n onLoadMore: (context: { signal: AbortSignal }) => Promise<void>;\n /** 可选的显式刷新操作;SDK 只触发回调,不规定请求方式。 */\n onRefresh?: (context: { signal: AbortSignal }) => Promise<void>;\n refreshing?: boolean;\n}\n\nexport interface IInvocation {\n id: string;\n name: string;\n spanId: string;\n traceId: string;\n parentSpanId: string;\n startTime: number;\n endTime: number;\n sessionId: string;\n invocationId: string;\n duration: number;\n attributes: Record<string, string>;\n botName: string;\n workspaceNo: string;\n status: number;\n agentName: string;\n agentNo: string;\n agentVersionNo: string;\n userId: string;\n}\n\nexport interface AgentRunRequest {\n stream?: boolean;\n sessionId: string | undefined;\n content: {\n parts: Array<{\n text?: string;\n functionResponse?: {\n id?: string;\n name?: string;\n response?: any;\n };\n }>;\n role: string;\n };\n files?: Array<{\n fileName: string;\n fileId?: string;\n tempUrl: string;\n type?: string;\n mimeType: string;\n }>;\n stateDelta?: any;\n}\nexport interface Blob {\n displayName?: string;\n mimeType?: string;\n data: string;\n}\n\nexport interface FunctionCall {\n id?: string;\n name: string;\n args: { [key: string]: any };\n}\n\nexport interface FunctionResponse {\n id?: string;\n name: string;\n response: { [key: string]: any };\n}\n\nexport interface FileData {\n displayName: string;\n mimeType: string;\n fileUri: string;\n}\n\nexport interface ExecutableCode {\n language: \"UNKNOWN\" | \"PYTHON\";\n code: string;\n}\n\nexport interface CodeExecutionResult {\n outcome: \"UNKNOWN\" | \"OK\" | \"FAILED\" | \"DEADLINE_EXCEEDED\";\n output: string;\n}\n\nexport interface Part {\n text?: string;\n inlineData?: Blob;\n functionCall?: FunctionCall;\n functionResponse?: FunctionResponse;\n thought?: boolean;\n fileData?: FileData;\n executableCode?: ExecutableCode;\n codeExecutionResult?: CodeExecutionResult;\n errorMessage?: string;\n}\n\nexport interface GenAiContent {\n role: string;\n parts: Part[];\n}\n\nexport interface LlmRequest {\n contents: GenAiContent[];\n}\n\nexport interface LlmResponse {\n partial?: boolean;\n content: GenAiContent;\n error?: string;\n errorMessage?: string;\n errorCode?: string;\n longRunningToolIds?: string[];\n}\n\nexport interface UsageMetadata {\n candidatesTokenCount?: number;\n promptTokenCount?: number;\n totalTokenCount?: number;\n [key: string]: any;\n}\n\nexport interface EventActions {\n message?: string;\n artifactDelta?: any;\n functionCall?: FunctionCall;\n functionResponse?: FunctionResponse;\n finishReason?: string;\n}\n\nexport interface Event extends LlmResponse {\n id?: string;\n author?: string;\n modelCode?: string;\n invocationId?: string;\n actions?: EventActions;\n longRunningToolIds?: string[];\n branch?: string;\n timestamp?: number;\n finishReason?: string;\n usageMetadata?: UsageMetadata;\n evalStatus?: any;\n failedMetric?: any;\n evalScore?: any;\n evalThreshold?: any;\n groundingMetadata?: {\n searchEntryPoint?: {\n renderedContent?: any;\n };\n };\n isLike?: number;\n sessionId?: string;\n}\n\nexport interface SessionState {\n [key: string]: unknown;\n}\n\nexport interface Session {\n id?: string;\n appName?: string;\n userId?: string;\n state?: SessionState;\n events?: Event[];\n lastUpdateTime?: number;\n}\n\nexport interface TimeTick {\n position: number;\n label: string;\n}\n\nexport interface IMessage {\n /** 前端生成的唯一标识 */\n id: string;\n /** 单次请求的唯一标识 */\n invocationId?: string;\n /** 单个Event的唯一标识,一个event里有可能有多个parts的消息 */\n eventId?: string;\n /** 消息发起人:智能体名称、user */\n author?: string;\n role: \"bot\" | \"user\";\n /** 时间戳 */\n timestamp?: number;\n isLoading?: boolean;\n /** 函数调用 */\n functionCall?: FunctionCall;\n /** 函数调用结果 */\n functionResponse?: FunctionResponse;\n /** 文件上传 */\n inlineData?: Blob;\n /** 文本消息 */\n text?: string;\n /** 文件信息 */\n fileData?: FileData[];\n /** 思考 */\n thought?: boolean;\n executableCode?: ExecutableCode;\n codeExecutionResult?: CodeExecutionResult;\n renderedContent?: any;\n /** 原始数据 */\n raw?: any;\n /** 模型编码,通常来自 stream 事件或历史消息 */\n modelCode?: string;\n /** 事件级 token 使用量等模型调用元数据 */\n usageMetadata?: UsageMetadata;\n /** 结束原因,通常来自最后一条 stream 事件 */\n finishReason?: string;\n // 下面暂时没有用到\n evalStatus?: any;\n failedMetric?: any;\n evalScore?: any;\n evalThreshold?: any;\n invocationIndex?: any;\n finalResponsePartIndex?: any;\n toolUseIndex?: any;\n /** 是否赞/踩 */\n isLike?: number;\n}\n\nexport type ActionProps = (data: {\n message: ChatGroup;\n isLastBotMsg: boolean;\n}) => JSX.Element | null;\n\nexport type ActionExtraProps = (data: {\n message: ChatGroup;\n isLastBotMsg: boolean;\n}) => ReactNode;\n\nexport type UserActionProps = (data: { message: ChatGroup }) => ReactNode | null;\n\nexport interface MarkdownResourceLink {\n /** 完整链接,如 skill://InnerSkill01 */\n href: string;\n /** Markdown 链接文字,如 @skill-creator */\n label: string;\n /** 协议类型,如 skill/plugin/knowledge */\n type: string;\n /** 协议值,如 InnerSkill01 */\n value: string;\n}\n\nexport type RenderMarkdownResourceLink = (\n link: MarkdownResourceLink,\n) => ReactNode | null;\n\n/**\n * 自定义工具调用渲染函数\n * - 返回 ReactNode:使用自定义渲染\n * - 返回 null:降级使用默认渲染\n *\n * @example\n * renderFunctionCall={(msg) => {\n * if (msg.functionCall?.name === 'my_tool') return <MyToolRender msg={msg} />;\n * return null; // 其他工具使用默认渲染\n * }}\n */\nexport type RenderFunctionCall = (msg: IMessage) => ReactNode | null;\n\n/** Markdown 自定义标签经过安全过滤后的结构化节点。 */\nexport interface MarkdownExtensionNode {\n tagName: string;\n attributes: Readonly<Record<string, string>>;\n text: string;\n children: ReactNode;\n}\n\n/**\n * Markdown 自定义标签扩展。\n * 标签及属性只有显式注册后才会交给渲染函数,业务协议无需进入 SDK 核心。\n */\nexport interface MarkdownExtension {\n tagName: string;\n allowedAttributes?: readonly string[];\n render: (node: MarkdownExtensionNode) => ReactNode | null;\n}\n\nexport interface XAdkChatbotProps extends Partial<XAdkSenderProps> {\n /**\n * 自定义工具调用渲染函数\n * 返回 null 则降级使用默认渲染\n */\n renderFunctionCall?: RenderFunctionCall;\n /**\n * 工具名 → 渲染类型的解析策略,默认使用 defaultToolKindResolver\n */\n toolKindResolver?: (name: string | undefined) => ToolRenderKind;\n /**\n * 聊天策略,可由 Provider preset 自动下发,也可在组件局部覆盖。\n */\n strategies?: ChatStrategies;\n /**\n * 组件直用时的协议预设。默认沿用 xgroup-adk 以兼容既有业务接入;\n * 需要中立行为时可传入 base。\n */\n preset?: ChatPresetInput;\n className?: string;\n style?: CSSProperties;\n // 加载状态\n loading?: boolean;\n /** 消息列表 */\n messages: IMessage[];\n /** 在消息组前插入自定义模块,适合系统提示、日期或分支分界线。 */\n renderBeforeGroup?: (context: ChatGroupRenderContext) => ReactNode;\n /** 在消息组后插入自定义模块,适合与某轮回复关联的业务内容。 */\n renderAfterGroup?: (context: ChatGroupRenderContext) => ReactNode;\n /** 基于组内数据替换默认消息展示;返回 undefined 时沿用默认展示,null 表示隐藏。 */\n renderGroup?: (context: ChatGroupRenderContext & { defaultNode: ReactNode }) => ReactNode | undefined;\n /** 按需加载消息。不传时仍一次性展示传入的全部 messages。 */\n history?: ChatHistoryPagination;\n /** 开场白 */\n prologue?: string;\n /** 建议回复 */\n suggestions?: string[];\n /** 欢迎页面 */\n welcome?: ReactNode;\n /** 显示函数调用详情 */\n showFnCallDetail?: boolean;\n /**\n * 数据是否就绪,就绪后触发首次自动滚底。默认 true。\n * 仅在需要等待异步加载历史消息的场景(如 XAdkProvider 内)才需设为 false,\n * 待数据加载完成后再切换为 true;独立使用时无需关心此属性。\n */\n initialized?: boolean;\n /**\n * 当前会话 ID,切换时自动重置滚动状态并置底。\n * 不传则退化为仅依赖 initialized 的单次置底行为。\n */\n sessionId?: string;\n /** 提交回调 */\n onSubmit?: ({ text, files }: SendContent) => void;\n /** 函数调用确认回调 */\n onConfirm?: (fnCall: FunctionCall, confirmed: boolean) => void;\n /** 停止回调 */\n onStop?: () => void;\n /** 清除回调 */\n onClear?: () => void;\n /** 建议回复回调 */\n onSuggest?: (text: string) => void;\n\n // ========== 新增功能 ==========\n\n /** Agent 名称 (欢迎页面) */\n agentName?: string;\n /** Agent 图标 (欢迎页面) */\n agentIcon?: string;\n /** Agent 描述 (欢迎页面) */\n description?: string;\n\n /** 是否显示重试按钮 */\n showRetry?: boolean;\n /** 是否显示复制按钮 */\n showCopy?: boolean;\n /** 是否显示日志按钮 */\n showLog?: boolean;\n\n /** 重试回调 */\n onRetry?: () => void;\n /** 复制回调 */\n onCopy?: (text: string) => void;\n /** 查看日志回调 */\n onShowLog?: (invocationId: string, timestamp?: number) => void;\n\n /** 是否启用消息分组 (默认 true) */\n enableGrouping?: boolean;\n\n /** 是否自动解析 process 内容并展示思维链 (默认 true) */\n enableProcessParsing?: boolean;\n\n /** 消息功能区 */\n actions?: ActionProps;\n /** 追加在消息功能区之后的内容,适合展示 token 消耗等业务扩展信息 */\n actionsExtra?: ActionExtraProps;\n\n /**\n * Process 解析选项\n * @example\n * // 业务项目格式 (注释模式)\n * parseOptions={{ mode: 'comment' }}\n *\n * @example\n * // 自定义格式\n * parseOptions={{\n * mode: 'custom',\n * customPatterns: [\n * { regex: /\\[REASONING\\]([\\s\\S]*?)\\[\\/REASONING\\]/g, type: 'reasoning' }\n * ]\n * }}\n */\n parseOptions?: {\n mode?: \"xml\" | \"comment\" | \"custom\";\n customPatterns?: Array<{ regex: RegExp; type: string }>;\n finalMarker?: string;\n };\n\n /** 是否禁用输入 */\n disabled?: boolean;\n\n /** 是否流式响应 */\n stream?: boolean;\n\n /** 点击对话中附件卡片的回调(非图片、非音视频文件) */\n onFileClick?: (file: FileItem) => void;\n\n /** 点击 Markdown 资源链接标签的回调,如 [@skill](skill://xxx) */\n onResourceLinkClick?: (link: MarkdownResourceLink) => void;\n\n /** 自定义 Markdown 资源链接渲染,返回 null 则降级使用默认标签样式 */\n renderResourceLink?: RenderMarkdownResourceLink;\n\n /** Markdown/XML 自定义标签扩展 */\n markdownExtensions?: readonly MarkdownExtension[];\n\n /** 消息列表为空时展示的自定义空状态组件 */\n empty?: ReactNode | (() => ReactNode);\n\n /** 是否启用用户消息 hover 操作栏(时间 + 复制),默认 false */\n showUserActions?: boolean;\n /** 用户消息自定义操作栏渲染,返回 null 则降级使用默认渲染 */\n userActions?: UserActionProps;\n}\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -18,6 +18,8 @@ export interface DebugOptions {
|
|
|
18
18
|
onSuccess?: (data: Success) => void;
|
|
19
19
|
onStream?: (data: Event) => void;
|
|
20
20
|
onMessage?: (content: string, data: IMessage) => void;
|
|
21
|
+
/** 调用 sendQueuedMessageNow 时可选的后端打断回调;成功后才停止前端流。 */
|
|
22
|
+
onInterrupt?: (sessionId: string) => Promise<unknown> | void;
|
|
21
23
|
}
|
|
22
24
|
/**
|
|
23
25
|
* 事件状态码枚举
|
|
@@ -129,6 +131,11 @@ export interface XAdkProviderConfig {
|
|
|
129
131
|
* @default true
|
|
130
132
|
*/
|
|
131
133
|
showFeedback?: boolean;
|
|
134
|
+
/**
|
|
135
|
+
* 是否启用用户消息 hover 操作栏(时间 + 复制)
|
|
136
|
+
* @default true
|
|
137
|
+
*/
|
|
138
|
+
showUserActions?: boolean;
|
|
132
139
|
/**
|
|
133
140
|
* 点击对话中附件卡片的回调(非图片、非音视频文件)
|
|
134
141
|
*/
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/types/XAdkProvider.ts"],
|
|
4
|
-
"sourcesContent": ["import { ReactNode } from \"react\";\nimport {\n IMessage,\n Success,\n Event,\n Error,\n SendContent,\n ThemeType,\n FileItem,\n UploadRequestFn,\n} from \"@/types\";\nimport type { ChatPresetInput, ChatStrategies } from \"./ChatStrategies\";\n\nexport interface DebugOptions {\n url: string;\n sessionId?: string;\n config: any;\n token: string;\n type?: \"agentDebug\" | \"appDebug\";\n /**\n * 是否启用 Hook\n * 当使用自定义 chatData 时,应设置为 false 以避免内部 Hook 初始化\n * @default true\n */\n enabled?: boolean;\n strategies?: ChatStrategies;\n onError?: (error: Error) => void;\n onSuccess?: (data: Success) => void;\n onStream?: (data: Event) => void;\n onMessage?: (content: string, data: IMessage) => void;\n}\n\n/**\n * 事件状态码枚举\n * @enum {string}\n * @version 1.0.0\n */\nexport enum EventCode {\n /** 切换会话 */\n SESSION_SWITCH = \"SESSION_SWITCH\",\n /** 开启新会话 */\n SESSION_CREATE = \"SESSION_CREATE\",\n}\n\nexport type handleEvent = {\n code: EventCode;\n message: string;\n data?: any;\n};\n/**\n * renderFooter insert 参数说明\n */\nexport interface FooterRenderArgs {\n message: IMessage;\n isLastBotMsg: boolean;\n isLastMsg: boolean;\n}\n\n/**\n * Provider 可通过 ref 暴露的方法句柄\n */\nexport interface XAdkProviderHandle {\n startChat: (content: SendContent) => void;\n stopChat: () => void;\n reChat: () => void;\n clearChat: () => void;\n deleteSession: (id: string) => void;\n updateSession: (id: string, title: string) => void;\n getAppInfo: () => any;\n getMessages: () => IMessage[];\n getSessions: () => any[];\n setMessages: (msgs: IMessage[]) => void;\n setCurrentSession: (id: string) => void;\n /**\n * 设置自定义业务参数 (stateDelta)\n * 设置后每次发送消息时会自动携带该参数至后端\n * 传入 undefined 可清除已设置的参数\n *\n * @example\n * providerRef.current.setStateDelta({ userId: '123', bizType: 'order' });\n * // 之后发送消息,请求体会携带 stateDelta: { userId: '123', bizType: 'order' }\n *\n * @example\n * // 清除自定义参数\n * providerRef.current.setStateDelta(undefined);\n */\n setStateDelta: (delta: Record<string, any> | undefined) => void;\n}\n\n/**\n * config.chatProps 中的配置\n */\nexport interface ChatConfig {\n /**\n * 是否展示清空按钮\n * @type {boolean}\n * @default false\n */\n clearBtnShow?: boolean;\n /**\n * 是否展示输入框\n * @type {boolean}\n * @default true\n */\n inputShow?: boolean;\n /**\n * 打字机效果速度(单位:毫秒)\n * @type {number}\n * @default 60\n * @version 1.0.0\n */\n textSpeed?: number;\n}\n\n/**\n * Provider config 整体配置结构\n */\nexport interface XAdkProviderConfig {\n session?: {\n showSessionList?: boolean;\n /** 是否轮询会话详情并主动补入异步任务消息,默认 true */\n pollSessionEvents?: boolean;\n /** 会话详情轮询间隔,单位毫秒,默认 10000,最小 1000 */\n sessionEventsPollingInterval?: number;\n };\n /**\n * 初始化后是否默认展示第一条会话内容\n * @type {boolean}\n * @default false\n */\n showFirstSession?: boolean;\n allowUpload?: boolean;\n /**\n * 是否启用拖拽上传(需 allowUpload 为 true 时生效)\n * 拖拽区域为整个聊天区域(不含侧边栏)\n * @default true\n */\n draggable?: boolean;\n appNo?: string;\n chatProps?: ChatConfig;\n debug?: boolean;\n /**\n * 是否展示点赞/点踩按钮\n * @default true\n */\n showFeedback?: boolean;\n /**\n * 点击对话中附件卡片的回调(非图片、非音视频文件)\n */\n onFileClick?: (file: FileItem) => void;\n /**\n * 自定义文件上传函数\n */\n uploadRequest?: UploadRequestFn;\n /**\n * 预设策略。默认 xgroup-adk,用于兼容众安信科现有 ADK 协议。\n * 传入 base 可获得更中立的组件默认行为。\n */\n preset?: ChatPresetInput;\n /**\n * 覆盖或补充当前 preset 的局部策略。\n */\n strategies?: ChatStrategies;\n}\n\n/**\n * XAdkProvider Props\n */\nexport interface XAdkProviderProps {\n /**\n * AI 服务基础地址\n */\n url?: string;\n /**\n * 认证 token\n */\n token: string;\n /**\n * 组件功能配置\n */\n config?: XAdkProviderConfig;\n /**\n * Provider 级预设策略,优先级高于 config.preset。\n */\n preset?: ChatPresetInput;\n /**\n * Provider 级策略覆盖,优先级高于 config.strategies。\n */\n strategies?: ChatStrategies;\n /**\n * Provider 唯一标识\n */\n providerId?: string;\n /**\n * 消息成功回调\n */\n onSuccess?: (success: any) => void;\n /**\n * 流式消息回调\n */\n onStream?: (data: Event) => void;\n /**\n * 错误回调\n */\n onError?: (err: any) => void;\n /**\n * 每条消息回调\n */\n onMessage?: (content: string, data: IMessage) => void;\n /**\n * 事件回调\n */\n onEvent?: (event: handleEvent) => void;\n /**\n * React 子元素 - 支持 Compound Components\n */\n children?: ReactNode;\n}\n\n// XAiSDKProps 继承 XAdkProviderProps\nexport interface XAdkSDKProps extends XAdkProviderProps {\n /**\n * 主题类型\n * @type {ThemeType}\n * @default 'default'\n * @version 1.0.0\n */\n theme?: ThemeType;\n\n /**\n * 组件属性配置\n * @type {object}\n * @default undefined\n * @version 1.0.0\n */\n componentProps?: {\n /**\n * 组件ID\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n id?: string;\n /** 支持任意 CSS 属性 */\n [key: string]: any;\n };\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"sourcesContent": ["import { ReactNode } from \"react\";\nimport {\n IMessage,\n Success,\n Event,\n Error,\n SendContent,\n ThemeType,\n FileItem,\n UploadRequestFn,\n} from \"@/types\";\nimport type { ChatPresetInput, ChatStrategies } from \"./ChatStrategies\";\n\nexport interface DebugOptions {\n url: string;\n sessionId?: string;\n config: any;\n token: string;\n type?: \"agentDebug\" | \"appDebug\";\n /**\n * 是否启用 Hook\n * 当使用自定义 chatData 时,应设置为 false 以避免内部 Hook 初始化\n * @default true\n */\n enabled?: boolean;\n strategies?: ChatStrategies;\n onError?: (error: Error) => void;\n onSuccess?: (data: Success) => void;\n onStream?: (data: Event) => void;\n onMessage?: (content: string, data: IMessage) => void;\n /** 调用 sendQueuedMessageNow 时可选的后端打断回调;成功后才停止前端流。 */\n onInterrupt?: (sessionId: string) => Promise<unknown> | void;\n}\n\n/**\n * 事件状态码枚举\n * @enum {string}\n * @version 1.0.0\n */\nexport enum EventCode {\n /** 切换会话 */\n SESSION_SWITCH = \"SESSION_SWITCH\",\n /** 开启新会话 */\n SESSION_CREATE = \"SESSION_CREATE\",\n}\n\nexport type handleEvent = {\n code: EventCode;\n message: string;\n data?: any;\n};\n/**\n * renderFooter insert 参数说明\n */\nexport interface FooterRenderArgs {\n message: IMessage;\n isLastBotMsg: boolean;\n isLastMsg: boolean;\n}\n\n/**\n * Provider 可通过 ref 暴露的方法句柄\n */\nexport interface XAdkProviderHandle {\n startChat: (content: SendContent) => void;\n stopChat: () => void;\n reChat: () => void;\n clearChat: () => void;\n deleteSession: (id: string) => void;\n updateSession: (id: string, title: string) => void;\n getAppInfo: () => any;\n getMessages: () => IMessage[];\n getSessions: () => any[];\n setMessages: (msgs: IMessage[]) => void;\n setCurrentSession: (id: string) => void;\n /**\n * 设置自定义业务参数 (stateDelta)\n * 设置后每次发送消息时会自动携带该参数至后端\n * 传入 undefined 可清除已设置的参数\n *\n * @example\n * providerRef.current.setStateDelta({ userId: '123', bizType: 'order' });\n * // 之后发送消息,请求体会携带 stateDelta: { userId: '123', bizType: 'order' }\n *\n * @example\n * // 清除自定义参数\n * providerRef.current.setStateDelta(undefined);\n */\n setStateDelta: (delta: Record<string, any> | undefined) => void;\n}\n\n/**\n * config.chatProps 中的配置\n */\nexport interface ChatConfig {\n /**\n * 是否展示清空按钮\n * @type {boolean}\n * @default false\n */\n clearBtnShow?: boolean;\n /**\n * 是否展示输入框\n * @type {boolean}\n * @default true\n */\n inputShow?: boolean;\n /**\n * 打字机效果速度(单位:毫秒)\n * @type {number}\n * @default 60\n * @version 1.0.0\n */\n textSpeed?: number;\n}\n\n/**\n * Provider config 整体配置结构\n */\nexport interface XAdkProviderConfig {\n session?: {\n showSessionList?: boolean;\n /** 是否轮询会话详情并主动补入异步任务消息,默认 true */\n pollSessionEvents?: boolean;\n /** 会话详情轮询间隔,单位毫秒,默认 10000,最小 1000 */\n sessionEventsPollingInterval?: number;\n };\n /**\n * 初始化后是否默认展示第一条会话内容\n * @type {boolean}\n * @default false\n */\n showFirstSession?: boolean;\n allowUpload?: boolean;\n /**\n * 是否启用拖拽上传(需 allowUpload 为 true 时生效)\n * 拖拽区域为整个聊天区域(不含侧边栏)\n * @default true\n */\n draggable?: boolean;\n appNo?: string;\n chatProps?: ChatConfig;\n debug?: boolean;\n /**\n * 是否展示点赞/点踩按钮\n * @default true\n */\n showFeedback?: boolean;\n /**\n * 是否启用用户消息 hover 操作栏(时间 + 复制)\n * @default true\n */\n showUserActions?: boolean;\n /**\n * 点击对话中附件卡片的回调(非图片、非音视频文件)\n */\n onFileClick?: (file: FileItem) => void;\n /**\n * 自定义文件上传函数\n */\n uploadRequest?: UploadRequestFn;\n /**\n * 预设策略。默认 xgroup-adk,用于兼容众安信科现有 ADK 协议。\n * 传入 base 可获得更中立的组件默认行为。\n */\n preset?: ChatPresetInput;\n /**\n * 覆盖或补充当前 preset 的局部策略。\n */\n strategies?: ChatStrategies;\n}\n\n/**\n * XAdkProvider Props\n */\nexport interface XAdkProviderProps {\n /**\n * AI 服务基础地址\n */\n url?: string;\n /**\n * 认证 token\n */\n token: string;\n /**\n * 组件功能配置\n */\n config?: XAdkProviderConfig;\n /**\n * Provider 级预设策略,优先级高于 config.preset。\n */\n preset?: ChatPresetInput;\n /**\n * Provider 级策略覆盖,优先级高于 config.strategies。\n */\n strategies?: ChatStrategies;\n /**\n * Provider 唯一标识\n */\n providerId?: string;\n /**\n * 消息成功回调\n */\n onSuccess?: (success: any) => void;\n /**\n * 流式消息回调\n */\n onStream?: (data: Event) => void;\n /**\n * 错误回调\n */\n onError?: (err: any) => void;\n /**\n * 每条消息回调\n */\n onMessage?: (content: string, data: IMessage) => void;\n /**\n * 事件回调\n */\n onEvent?: (event: handleEvent) => void;\n /**\n * React 子元素 - 支持 Compound Components\n */\n children?: ReactNode;\n}\n\n// XAiSDKProps 继承 XAdkProviderProps\nexport interface XAdkSDKProps extends XAdkProviderProps {\n /**\n * 主题类型\n * @type {ThemeType}\n * @default 'default'\n * @version 1.0.0\n */\n theme?: ThemeType;\n\n /**\n * 组件属性配置\n * @type {object}\n * @default undefined\n * @version 1.0.0\n */\n componentProps?: {\n /**\n * 组件ID\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n id?: string;\n /** 支持任意 CSS 属性 */\n [key: string]: any;\n };\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAuCO,IAAK,YAAL,kBAAKA,eAAL;AAEL,EAAAA,WAAA,oBAAiB;AAEjB,EAAAA,WAAA,oBAAiB;AAJP,SAAAA;AAAA,GAAA;",
|
|
6
6
|
"names": ["EventCode"]
|
|
7
7
|
}
|
|
@@ -186,6 +186,12 @@ export interface SenderUIProps {
|
|
|
186
186
|
/** 非受控:输入框默认值 */
|
|
187
187
|
defaultValue?: string;
|
|
188
188
|
onClear?: () => void;
|
|
189
|
+
/** 清除按钮的二次确认文案;未传时沿用 SDK 默认文案。 */
|
|
190
|
+
clearConfirm?: {
|
|
191
|
+
title?: React.ReactNode;
|
|
192
|
+
okText?: React.ReactNode;
|
|
193
|
+
cancelText?: React.ReactNode;
|
|
194
|
+
};
|
|
189
195
|
onChange?: (value: string) => void;
|
|
190
196
|
onSubmit?: (data: XAdkSenderSubmitData) => void;
|
|
191
197
|
onStop?: () => void;
|
|
@@ -251,7 +257,8 @@ export interface SenderUIProps {
|
|
|
251
257
|
}
|
|
252
258
|
export type XAdkSenderProps = SenderUIProps & UploaderCoreProps;
|
|
253
259
|
export interface XAdkSenderHandle {
|
|
254
|
-
|
|
260
|
+
/** 添加本地文件或已上传文件;后者直接进入附件列表,不重复上传。 */
|
|
261
|
+
addFiles: (files: Array<File | ServerFile>) => void;
|
|
255
262
|
/** 向当前光标位置插入一个内联 Mention;未启用 inlineTags 时会退化为追加 Mention。 */
|
|
256
263
|
insertMention: (mention: MentionTag) => void;
|
|
257
264
|
/** @deprecated 请使用 insertMention。 */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/types/XAdkSender.ts"],
|
|
4
|
-
"sourcesContent": ["// types/XAdkSender.ts\nimport React from \"react\";\n\n// ===================== 快捷键/Mention 相关类型 =====================\n\n/** 快捷键触发的列表项 */\nexport interface QuickListOption {\n id: string;\n label: string;\n description?: string;\n icon?: React.ReactNode;\n /** 选中后的行为。insert 会写入 Mention;command 仅执行回调。默认 insert。 */\n action?: \"insert\" | \"command\";\n /** 选中当前选项时执行,可用于 command 类型的业务动作。 */\n onSelect?: (option: QuickListOption) => void;\n /** 分组名(用于聚合列表,子分组通过下划线分割) */\n group?: string;\n [key: string]: any;\n}\n\n/** 快捷键配置 */\nexport interface QuickKeyConfig {\n /** 触发字符,如 '@', '#', '$' */\n key: string;\n /** 选中后写入 MentionTag.type 的语义类型,不传时回退为 key */\n mentionType?: string;\n /** @deprecated 请使用 mentionType。 */\n tagType?: string;\n /** 列表标题 */\n title?: string;\n /** 列表数据 */\n options: QuickListOption[];\n /** 自定义列表项渲染 */\n renderItem?: (option: QuickListOption) => React.ReactNode;\n /** 选中回调 */\n onSelect?: (option: QuickListOption) => void;\n}\n\n/** 输入框内的资源引用。SDK 只理解通用 Mention,业务语义可放入 data 或可选语义字段。 */\nexport interface MentionTag {\n id: string;\n label: string;\n /** Mention 类型,如 'knowledge', 'skill', 'plugin', 'agent' */\n type: string;\n /** 资源 URI,如 skill://skillNo、kb://kb/knNo/dir/docs/2024 */\n uri?: string;\n /** 业务资源 ID,如 skillNo、knowledgeNo */\n targetId?: string;\n /** 展示名;不传时回退 label */\n displayName?: string;\n /** 提交为纯文本/Markdown/XML 时使用的业务值,不传时回退 uri/targetId/label */\n value?: string;\n /** 触发字符,如 '@', '#', '$',用于业务方区分来源 */\n trigger?: string;\n color?: string;\n icon?: React.ReactNode;\n /** 业务扩展上下文,例如知识库目录 scope */\n scope?: any;\n /** 原始数据 */\n data?: any;\n}\n\n/** @deprecated 请使用 MentionTag。 */\nexport type InputTag = MentionTag;\n\nexport interface InlineTagRenderInfo {\n onRemove: () => void;\n}\n\nexport type XAdkSenderSubmitFormat = \"text\" | \"structured\" | \"markdown\" | \"xml\";\n\nexport type XAdkSenderSubmitPart =\n | { type: \"text\"; text: string }\n | { type: \"mention\"; mention: MentionTag };\n\n/** @deprecated 旧 tag part,仅用于兼容 defaultInputParts 历史传入。 */\nexport type XAdkSenderLegacyTagPart = { type: \"tag\"; tag: MentionTag };\n\n/** 输入框文本/Mention 有序片段,表示用户正在编辑的输入内容 */\nexport type XAdkSenderInputPart =\n | XAdkSenderSubmitPart\n | XAdkSenderLegacyTagPart;\n\nexport interface XAdkSenderFormatMentionContext {\n format: Exclude<XAdkSenderSubmitFormat, \"structured\">;\n index: number;\n}\n\n/** @deprecated 请使用 XAdkSenderFormatMentionContext。 */\nexport type XAdkSenderFormatTagContext = XAdkSenderFormatMentionContext;\n\nexport interface XAdkSenderSubmitData<TPayload = unknown> {\n /** 根据 submitFormat 生成的最终内容,默认是纯文本 */\n text: string;\n /** 去掉标签后的用户原始输入文本 */\n rawText: string;\n /** 当前提交格式 */\n format: XAdkSenderSubmitFormat;\n /** 文本与 Mention 的有序片段,inlineTags 模式下可还原资源引用在输入框中的位置 */\n parts: XAdkSenderSubmitPart[];\n files: ServerFile[];\n /** 当前 Mention 列表 */\n mentions?: MentionTag[];\n /** @deprecated 请使用 mentions。 */\n tags?: MentionTag[];\n /** 业务方通过 transformSubmitData 派生出的自定义提交结构 */\n payload?: TPayload;\n}\n\n// ===================== 上传相关类型 =====================\n\nexport interface UploadFileResult {\n fileName?: string;\n fileId?: string | number;\n tempUrl?: string;\n url?: string;\n fileUrl?: string;\n fileType?: string;\n fileSize?: number;\n mimeType?: string;\n [key: string]: any;\n}\n\nexport interface UploadSuccessResponse {\n data?: UploadFileResult | UploadFileResult[];\n [key: string]: any;\n}\n\ninterface uploadRequestProps {\n (options: {\n file: File;\n onProgress?: (e: { percent: number }) => void;\n onSuccess?: (\n response: UploadFileResult | UploadFileResult[] | UploadSuccessResponse,\n ) => void;\n onError?: (error: Error) => void;\n }): Promise<void> | void;\n}\n\nexport type UploadRequestFn = uploadRequestProps;\n\nexport interface ServerFile {\n fileName: string;\n fileId: string | number;\n tempUrl: string;\n type: string;\n size?: number;\n mimeType: string;\n raw?: UploadFileResult;\n}\n\nexport interface LocalFile {\n id: string;\n uid: string;\n name: string;\n file: File;\n size: number;\n type: string;\n progress: number;\n status: \"pending\" | \"uploading\" | \"success\" | \"error\";\n // 服务器返回字段\n fileId?: string | number;\n tempUrl?: string;\n response?: any;\n errorMessage?: string; // 上传错误信息\n}\n\nexport type FileValidator = (\n file: File,\n context: { files: LocalFile[] },\n) => string | null;\n\nexport interface ActionsComponents {\n SendButton: React.ComponentType<any>;\n ClearButton: React.ComponentType<any>;\n}\n\nexport type SlotRenderFunction = (\n oriNode: React.ReactNode,\n info: { components: ActionsComponents },\n) => React.ReactNode | false;\n\n// 上传相关\nexport interface UploaderCoreProps {\n uploadRequest?: uploadRequestProps;\n\n maxFileSize?: number;\n allowedFileTypes?: string[];\n maxFiles?: number;\n\n validators?: FileValidator[];\n\n // 数据层回调\n onFilesChange?: (files: LocalFile[]) => void;\n onUploadSuccess?: (file: LocalFile) => void;\n onUploadError?: (file: LocalFile, error: Error) => void;\n}\n\n// UI 相关\nexport interface SenderUIProps {\n clearBtnShow?: boolean;\n /**\n * 是否启用 Sender 自身的拖拽上传。\n * 拖拽产生的文件通过 onFileSelect 回调交给业务/外层处理;\n * 默认 false,由外层(如 DefaultLayout)管理拖拽时无需开启。\n */\n draggable?: boolean;\n /**\n * 拖拽文件回调:当 draggable 为 true 且用户向输入区拖拽文件时触发。\n * 业务/外层在此回调中决定如何处理文件(通常调用 senderRef.addFiles 注入)。\n */\n onFileSelect?: (files: File[]) => void;\n loading?: boolean;\n disabled?: boolean; // 只读状态\n placeholder?: string;\n /** 受控:输入框的值 */\n value?: string;\n /** 非受控:输入框默认值 */\n defaultValue?: string;\n onClear?: () => void;\n onChange?: (value: string) => void;\n onSubmit?: (data: XAdkSenderSubmitData) => void;\n onStop?: () => void;\n\n /** 自定义发送按钮渲染 */\n sendButtonRender?: (info: {\n loading: boolean;\n disabled: boolean;\n /** 当前是否可以发送(文本非空或有已上传的文件) */\n canSend: boolean;\n onSend: () => void;\n onStop?: () => void;\n }) => React.ReactNode;\n\n // UI插槽功能\n /** 后缀内容,默认展示操作按钮,设为 false 时不显示 */\n suffix?: React.ReactNode | false | SlotRenderFunction;\n /** 输入主体内部的头部内容 */\n header?: React.ReactNode | false | SlotRenderFunction;\n /** 前缀内容 */\n prefix?: React.ReactNode | false | SlotRenderFunction;\n /** 底部内容 */\n footer?: React.ReactNode | false | SlotRenderFunction;\n /** 底部左侧拓展区域,不传时 footer 保持原有居中布局 */\n footerLeft?: React.ReactNode | false | SlotRenderFunction;\n\n // 快捷键/Mention 功能\n /** 快捷键配置列表 */\n quickKeys?: QuickKeyConfig[];\n /** 是否把 Mention 以内联 token 形式展示在输入区内;默认 false 保持历史 textarea 行为 */\n inlineTags?: boolean;\n /** 自定义内联 Mention 渲染 */\n renderMention?: (\n mention: MentionTag,\n info: InlineTagRenderInfo,\n ) => React.ReactNode;\n /** @deprecated 请使用 renderMention。 */\n renderTag?: (\n mention: MentionTag,\n info: InlineTagRenderInfo,\n ) => React.ReactNode;\n /** 受控:Mention 列表 */\n mentions?: MentionTag[];\n /** @deprecated 请使用 mentions。 */\n tags?: MentionTag[];\n /** 非受控:默认 Mention 列表 */\n defaultMentions?: MentionTag[];\n /** @deprecated 请使用 defaultMentions。 */\n defaultTags?: MentionTag[];\n /** 非受控:默认输入内容片段,用于初始化内联 Mention 输入区 */\n defaultInputParts?: XAdkSenderInputPart[];\n /** Mention 变化回调 */\n onMentionsChange?: (mentions: MentionTag[]) => void;\n /** @deprecated 请使用 onMentionsChange。 */\n onTagsChange?: (mentions: MentionTag[]) => void;\n /** 快捷键触发回调(业务方可在此处理搜索等逻辑) */\n onQuickKeyTrigger?: (key: string, keyword: string) => void;\n /**\n * 提交内容格式:\n * - text: 默认,输出文字 + Mention 文本(如 @生图技能)\n * - structured: 保留 parts/mentions/files 结构化数据,text 为 rawText\n * - markdown/xml: 输出对应标记文本\n */\n submitFormat?: XAdkSenderSubmitFormat;\n /** 自定义 Mention 在 text/markdown/xml 格式中的序列化结果 */\n formatMention?: (\n mention: MentionTag,\n context: XAdkSenderFormatMentionContext,\n ) => string;\n /** @deprecated 请使用 formatMention。 */\n formatTag?: (\n mention: MentionTag,\n context: XAdkSenderFormatMentionContext,\n ) => string;\n /**\n * 基于 SDK 标准提交结构派生业务 payload。\n * SDK 不理解 knowledge/skill/agent 等业务字段,只负责把 payload 原样放入 onSubmit 数据中。\n */\n transformSubmitData?: (\n data: Omit<XAdkSenderSubmitData, \"payload\">,\n ) => unknown;\n}\n\nexport type XAdkSenderProps = SenderUIProps & UploaderCoreProps;\n\nexport interface XAdkSenderHandle {\n addFiles: (files: File
|
|
4
|
+
"sourcesContent": ["// types/XAdkSender.ts\nimport React from \"react\";\n\n// ===================== 快捷键/Mention 相关类型 =====================\n\n/** 快捷键触发的列表项 */\nexport interface QuickListOption {\n id: string;\n label: string;\n description?: string;\n icon?: React.ReactNode;\n /** 选中后的行为。insert 会写入 Mention;command 仅执行回调。默认 insert。 */\n action?: \"insert\" | \"command\";\n /** 选中当前选项时执行,可用于 command 类型的业务动作。 */\n onSelect?: (option: QuickListOption) => void;\n /** 分组名(用于聚合列表,子分组通过下划线分割) */\n group?: string;\n [key: string]: any;\n}\n\n/** 快捷键配置 */\nexport interface QuickKeyConfig {\n /** 触发字符,如 '@', '#', '$' */\n key: string;\n /** 选中后写入 MentionTag.type 的语义类型,不传时回退为 key */\n mentionType?: string;\n /** @deprecated 请使用 mentionType。 */\n tagType?: string;\n /** 列表标题 */\n title?: string;\n /** 列表数据 */\n options: QuickListOption[];\n /** 自定义列表项渲染 */\n renderItem?: (option: QuickListOption) => React.ReactNode;\n /** 选中回调 */\n onSelect?: (option: QuickListOption) => void;\n}\n\n/** 输入框内的资源引用。SDK 只理解通用 Mention,业务语义可放入 data 或可选语义字段。 */\nexport interface MentionTag {\n id: string;\n label: string;\n /** Mention 类型,如 'knowledge', 'skill', 'plugin', 'agent' */\n type: string;\n /** 资源 URI,如 skill://skillNo、kb://kb/knNo/dir/docs/2024 */\n uri?: string;\n /** 业务资源 ID,如 skillNo、knowledgeNo */\n targetId?: string;\n /** 展示名;不传时回退 label */\n displayName?: string;\n /** 提交为纯文本/Markdown/XML 时使用的业务值,不传时回退 uri/targetId/label */\n value?: string;\n /** 触发字符,如 '@', '#', '$',用于业务方区分来源 */\n trigger?: string;\n color?: string;\n icon?: React.ReactNode;\n /** 业务扩展上下文,例如知识库目录 scope */\n scope?: any;\n /** 原始数据 */\n data?: any;\n}\n\n/** @deprecated 请使用 MentionTag。 */\nexport type InputTag = MentionTag;\n\nexport interface InlineTagRenderInfo {\n onRemove: () => void;\n}\n\nexport type XAdkSenderSubmitFormat = \"text\" | \"structured\" | \"markdown\" | \"xml\";\n\nexport type XAdkSenderSubmitPart =\n | { type: \"text\"; text: string }\n | { type: \"mention\"; mention: MentionTag };\n\n/** @deprecated 旧 tag part,仅用于兼容 defaultInputParts 历史传入。 */\nexport type XAdkSenderLegacyTagPart = { type: \"tag\"; tag: MentionTag };\n\n/** 输入框文本/Mention 有序片段,表示用户正在编辑的输入内容 */\nexport type XAdkSenderInputPart =\n | XAdkSenderSubmitPart\n | XAdkSenderLegacyTagPart;\n\nexport interface XAdkSenderFormatMentionContext {\n format: Exclude<XAdkSenderSubmitFormat, \"structured\">;\n index: number;\n}\n\n/** @deprecated 请使用 XAdkSenderFormatMentionContext。 */\nexport type XAdkSenderFormatTagContext = XAdkSenderFormatMentionContext;\n\nexport interface XAdkSenderSubmitData<TPayload = unknown> {\n /** 根据 submitFormat 生成的最终内容,默认是纯文本 */\n text: string;\n /** 去掉标签后的用户原始输入文本 */\n rawText: string;\n /** 当前提交格式 */\n format: XAdkSenderSubmitFormat;\n /** 文本与 Mention 的有序片段,inlineTags 模式下可还原资源引用在输入框中的位置 */\n parts: XAdkSenderSubmitPart[];\n files: ServerFile[];\n /** 当前 Mention 列表 */\n mentions?: MentionTag[];\n /** @deprecated 请使用 mentions。 */\n tags?: MentionTag[];\n /** 业务方通过 transformSubmitData 派生出的自定义提交结构 */\n payload?: TPayload;\n}\n\n// ===================== 上传相关类型 =====================\n\nexport interface UploadFileResult {\n fileName?: string;\n fileId?: string | number;\n tempUrl?: string;\n url?: string;\n fileUrl?: string;\n fileType?: string;\n fileSize?: number;\n mimeType?: string;\n [key: string]: any;\n}\n\nexport interface UploadSuccessResponse {\n data?: UploadFileResult | UploadFileResult[];\n [key: string]: any;\n}\n\ninterface uploadRequestProps {\n (options: {\n file: File;\n onProgress?: (e: { percent: number }) => void;\n onSuccess?: (\n response: UploadFileResult | UploadFileResult[] | UploadSuccessResponse,\n ) => void;\n onError?: (error: Error) => void;\n }): Promise<void> | void;\n}\n\nexport type UploadRequestFn = uploadRequestProps;\n\nexport interface ServerFile {\n fileName: string;\n fileId: string | number;\n tempUrl: string;\n type: string;\n size?: number;\n mimeType: string;\n raw?: UploadFileResult;\n}\n\nexport interface LocalFile {\n id: string;\n uid: string;\n name: string;\n file: File;\n size: number;\n type: string;\n progress: number;\n status: \"pending\" | \"uploading\" | \"success\" | \"error\";\n // 服务器返回字段\n fileId?: string | number;\n tempUrl?: string;\n response?: any;\n errorMessage?: string; // 上传错误信息\n}\n\nexport type FileValidator = (\n file: File,\n context: { files: LocalFile[] },\n) => string | null;\n\nexport interface ActionsComponents {\n SendButton: React.ComponentType<any>;\n ClearButton: React.ComponentType<any>;\n}\n\nexport type SlotRenderFunction = (\n oriNode: React.ReactNode,\n info: { components: ActionsComponents },\n) => React.ReactNode | false;\n\n// 上传相关\nexport interface UploaderCoreProps {\n uploadRequest?: uploadRequestProps;\n\n maxFileSize?: number;\n allowedFileTypes?: string[];\n maxFiles?: number;\n\n validators?: FileValidator[];\n\n // 数据层回调\n onFilesChange?: (files: LocalFile[]) => void;\n onUploadSuccess?: (file: LocalFile) => void;\n onUploadError?: (file: LocalFile, error: Error) => void;\n}\n\n// UI 相关\nexport interface SenderUIProps {\n clearBtnShow?: boolean;\n /**\n * 是否启用 Sender 自身的拖拽上传。\n * 拖拽产生的文件通过 onFileSelect 回调交给业务/外层处理;\n * 默认 false,由外层(如 DefaultLayout)管理拖拽时无需开启。\n */\n draggable?: boolean;\n /**\n * 拖拽文件回调:当 draggable 为 true 且用户向输入区拖拽文件时触发。\n * 业务/外层在此回调中决定如何处理文件(通常调用 senderRef.addFiles 注入)。\n */\n onFileSelect?: (files: File[]) => void;\n loading?: boolean;\n disabled?: boolean; // 只读状态\n placeholder?: string;\n /** 受控:输入框的值 */\n value?: string;\n /** 非受控:输入框默认值 */\n defaultValue?: string;\n onClear?: () => void;\n /** 清除按钮的二次确认文案;未传时沿用 SDK 默认文案。 */\n clearConfirm?: {\n title?: React.ReactNode;\n okText?: React.ReactNode;\n cancelText?: React.ReactNode;\n };\n onChange?: (value: string) => void;\n onSubmit?: (data: XAdkSenderSubmitData) => void;\n onStop?: () => void;\n\n /** 自定义发送按钮渲染 */\n sendButtonRender?: (info: {\n loading: boolean;\n disabled: boolean;\n /** 当前是否可以发送(文本非空或有已上传的文件) */\n canSend: boolean;\n onSend: () => void;\n onStop?: () => void;\n }) => React.ReactNode;\n\n // UI插槽功能\n /** 后缀内容,默认展示操作按钮,设为 false 时不显示 */\n suffix?: React.ReactNode | false | SlotRenderFunction;\n /** 输入主体内部的头部内容 */\n header?: React.ReactNode | false | SlotRenderFunction;\n /** 前缀内容 */\n prefix?: React.ReactNode | false | SlotRenderFunction;\n /** 底部内容 */\n footer?: React.ReactNode | false | SlotRenderFunction;\n /** 底部左侧拓展区域,不传时 footer 保持原有居中布局 */\n footerLeft?: React.ReactNode | false | SlotRenderFunction;\n\n // 快捷键/Mention 功能\n /** 快捷键配置列表 */\n quickKeys?: QuickKeyConfig[];\n /** 是否把 Mention 以内联 token 形式展示在输入区内;默认 false 保持历史 textarea 行为 */\n inlineTags?: boolean;\n /** 自定义内联 Mention 渲染 */\n renderMention?: (\n mention: MentionTag,\n info: InlineTagRenderInfo,\n ) => React.ReactNode;\n /** @deprecated 请使用 renderMention。 */\n renderTag?: (\n mention: MentionTag,\n info: InlineTagRenderInfo,\n ) => React.ReactNode;\n /** 受控:Mention 列表 */\n mentions?: MentionTag[];\n /** @deprecated 请使用 mentions。 */\n tags?: MentionTag[];\n /** 非受控:默认 Mention 列表 */\n defaultMentions?: MentionTag[];\n /** @deprecated 请使用 defaultMentions。 */\n defaultTags?: MentionTag[];\n /** 非受控:默认输入内容片段,用于初始化内联 Mention 输入区 */\n defaultInputParts?: XAdkSenderInputPart[];\n /** Mention 变化回调 */\n onMentionsChange?: (mentions: MentionTag[]) => void;\n /** @deprecated 请使用 onMentionsChange。 */\n onTagsChange?: (mentions: MentionTag[]) => void;\n /** 快捷键触发回调(业务方可在此处理搜索等逻辑) */\n onQuickKeyTrigger?: (key: string, keyword: string) => void;\n /**\n * 提交内容格式:\n * - text: 默认,输出文字 + Mention 文本(如 @生图技能)\n * - structured: 保留 parts/mentions/files 结构化数据,text 为 rawText\n * - markdown/xml: 输出对应标记文本\n */\n submitFormat?: XAdkSenderSubmitFormat;\n /** 自定义 Mention 在 text/markdown/xml 格式中的序列化结果 */\n formatMention?: (\n mention: MentionTag,\n context: XAdkSenderFormatMentionContext,\n ) => string;\n /** @deprecated 请使用 formatMention。 */\n formatTag?: (\n mention: MentionTag,\n context: XAdkSenderFormatMentionContext,\n ) => string;\n /**\n * 基于 SDK 标准提交结构派生业务 payload。\n * SDK 不理解 knowledge/skill/agent 等业务字段,只负责把 payload 原样放入 onSubmit 数据中。\n */\n transformSubmitData?: (\n data: Omit<XAdkSenderSubmitData, \"payload\">,\n ) => unknown;\n}\n\nexport type XAdkSenderProps = SenderUIProps & UploaderCoreProps;\n\nexport interface XAdkSenderHandle {\n /** 添加本地文件或已上传文件;后者直接进入附件列表,不重复上传。 */\n addFiles: (files: Array<File | ServerFile>) => void;\n /** 向当前光标位置插入一个内联 Mention;未启用 inlineTags 时会退化为追加 Mention。 */\n insertMention: (mention: MentionTag) => void;\n /** @deprecated 请使用 insertMention。 */\n insertTag: (mention: MentionTag) => void;\n /** 聚焦输入区 */\n focus: () => void;\n}\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -15,6 +15,8 @@ export interface XAdkThoughtChainProps {
|
|
|
15
15
|
/** @deprecated 使用 status='loading' 替代,保留向后兼容 */
|
|
16
16
|
loading?: boolean;
|
|
17
17
|
title?: ReactNode;
|
|
18
|
+
/** 当前执行步骤或 Agent 名称,仅在执行中展示 */
|
|
19
|
+
activeStep?: string;
|
|
18
20
|
items: ThoughtChainItemType[];
|
|
19
21
|
showFnCallDetail?: boolean;
|
|
20
22
|
onConfirm?: (fnCall: any, confirmed: boolean) => void;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/types/XAdkThoughtChain.ts"],
|
|
4
|
-
"sourcesContent": ["import React, { type ReactNode } from \"react\";\nimport {\n IMessage,\n RenderFunctionCall,\n ToolRenderKind,\n ChatStrategies,\n} from \"@/types\";\n\nexport type ThoughtChainStatus = \"pending\" | \"loading\" | \"success\" | \"error\";\n\nexport interface XAdkThoughtChainProps {\n /** 是否显示外层可折叠 header(默认 false) */\n collapsible?: boolean;\n /** 状态枚举,优先级高于 loading(默认 'success') */\n status?: ThoughtChainStatus;\n /** 标准 className */\n className?: string;\n /** 标准 style */\n style?: React.CSSProperties;\n /** 默认展开状态,仅在 collapsible=true 时生效 */\n defaultOpen?: boolean;\n /** @deprecated 使用 status='loading' 替代,保留向后兼容 */\n loading?: boolean;\n title?: ReactNode;\n items: ThoughtChainItemType[];\n showFnCallDetail?: boolean;\n onConfirm?: (fnCall: any, confirmed: boolean) => void;\n blink?: boolean;\n /** 自定义工具调用渲染函数,返回 null 则使用默认渲染 */\n renderFunctionCall?: RenderFunctionCall;\n /**\n * 工具名 → 渲染类型的解析策略,默认使用 defaultToolKindResolver\n */\n toolKindResolver?: (name: string | undefined) => ToolRenderKind;\n /** 聊天策略,可由 Provider preset 自动下发,也可在组件局部覆盖。 */\n strategies?: ChatStrategies;\n}\n\nexport interface TimelineItemProps {\n icon: React.ReactNode;\n title: React.ReactNode;\n children: React.ReactNode;\n collapsible?: boolean;\n defaultOpen?: boolean;\n blink?: boolean;\n}\n\nexport interface ThoughtChainItemType {\n type: \"tool\" | \"text\";\n key: string;\n content: string;\n title?: ReactNode;\n collapsible?: boolean;\n msg?: IMessage;\n /** item 级别状态 */\n status?: ThoughtChainStatus;\n}\n"],
|
|
4
|
+
"sourcesContent": ["import React, { type ReactNode } from \"react\";\nimport {\n IMessage,\n RenderFunctionCall,\n ToolRenderKind,\n ChatStrategies,\n} from \"@/types\";\n\nexport type ThoughtChainStatus = \"pending\" | \"loading\" | \"success\" | \"error\";\n\nexport interface XAdkThoughtChainProps {\n /** 是否显示外层可折叠 header(默认 false) */\n collapsible?: boolean;\n /** 状态枚举,优先级高于 loading(默认 'success') */\n status?: ThoughtChainStatus;\n /** 标准 className */\n className?: string;\n /** 标准 style */\n style?: React.CSSProperties;\n /** 默认展开状态,仅在 collapsible=true 时生效 */\n defaultOpen?: boolean;\n /** @deprecated 使用 status='loading' 替代,保留向后兼容 */\n loading?: boolean;\n title?: ReactNode;\n /** 当前执行步骤或 Agent 名称,仅在执行中展示 */\n activeStep?: string;\n items: ThoughtChainItemType[];\n showFnCallDetail?: boolean;\n onConfirm?: (fnCall: any, confirmed: boolean) => void;\n blink?: boolean;\n /** 自定义工具调用渲染函数,返回 null 则使用默认渲染 */\n renderFunctionCall?: RenderFunctionCall;\n /**\n * 工具名 → 渲染类型的解析策略,默认使用 defaultToolKindResolver\n */\n toolKindResolver?: (name: string | undefined) => ToolRenderKind;\n /** 聊天策略,可由 Provider preset 自动下发,也可在组件局部覆盖。 */\n strategies?: ChatStrategies;\n}\n\nexport interface TimelineItemProps {\n icon: React.ReactNode;\n title: React.ReactNode;\n children: React.ReactNode;\n collapsible?: boolean;\n defaultOpen?: boolean;\n blink?: boolean;\n}\n\nexport interface ThoughtChainItemType {\n type: \"tool\" | \"text\";\n key: string;\n content: string;\n title?: ReactNode;\n collapsible?: boolean;\n msg?: IMessage;\n /** item 级别状态 */\n status?: ThoughtChainStatus;\n}\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* 从 @ant-design/x 源码提取的公共 API 类型,减少外部依赖
|
|
4
4
|
*/
|
|
5
5
|
import type React from 'react';
|
|
6
|
-
import type { UploadFile, MenuProps } from 'antd';
|
|
6
|
+
import type { UploadFile, MenuProps, InputProps } from 'antd';
|
|
7
7
|
export interface ConversationItemType extends Omit<React.HTMLAttributes<HTMLLIElement>, 'onClick'> {
|
|
8
8
|
key: string;
|
|
9
9
|
label?: React.ReactNode;
|
|
@@ -41,7 +41,7 @@ export interface ConversationsProps extends React.HTMLAttributes<HTMLUListElemen
|
|
|
41
41
|
prefixCls?: string;
|
|
42
42
|
rootClassName?: string;
|
|
43
43
|
}
|
|
44
|
-
type TextareaProps =
|
|
44
|
+
type TextareaProps = InputProps;
|
|
45
45
|
type SubmitType = 'enter' | 'shiftEnter';
|
|
46
46
|
type SenderSemanticType = 'root' | 'prefix' | 'input' | 'suffix' | 'footer' | 'switch' | 'content';
|
|
47
47
|
export interface SenderComponents {
|
|
@@ -57,7 +57,10 @@ export type BaseNode = React.ReactNode | false;
|
|
|
57
57
|
export type NodeRender = (oriNode: React.ReactNode, info: {
|
|
58
58
|
components: ActionsComponents;
|
|
59
59
|
}) => BaseNode;
|
|
60
|
-
export interface SenderProps extends Partial<Pick<TextareaProps, 'placeholder' | 'onKeyUp' | 'onFocus' | 'onBlur'
|
|
60
|
+
export interface SenderProps extends Omit<Partial<Pick<TextareaProps, 'placeholder' | 'onKeyUp' | 'onFocus' | 'onBlur'>>, 'onKeyUp' | 'onFocus' | 'onBlur'> {
|
|
61
|
+
onKeyUp?: React.KeyboardEventHandler<HTMLTextAreaElement>;
|
|
62
|
+
onFocus?: React.FocusEventHandler<HTMLTextAreaElement>;
|
|
63
|
+
onBlur?: React.FocusEventHandler<HTMLTextAreaElement>;
|
|
61
64
|
prefixCls?: string;
|
|
62
65
|
defaultValue?: string;
|
|
63
66
|
value?: string;
|