@ai-group/chat-sdk 3.6.12 → 3.7.1-alpha1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/dist/cjs/components/XAdkChatbot/index.js +2 -2
  2. package/dist/cjs/components/XAdkChatbot/index.js.map +2 -2
  3. package/dist/cjs/components/XAdkProvider/index.js +3 -3
  4. package/dist/cjs/components/XAdkProvider/index.js.map +2 -2
  5. package/dist/cjs/components/XAdkSender/InlineTagInput.d.ts +24 -0
  6. package/dist/cjs/components/XAdkSender/InlineTagInput.js +461 -0
  7. package/dist/cjs/components/XAdkSender/InlineTagInput.js.map +7 -0
  8. package/dist/cjs/components/XAdkSender/InputTags.d.ts +8 -0
  9. package/dist/cjs/components/XAdkSender/InputTags.js +51 -0
  10. package/dist/cjs/components/XAdkSender/InputTags.js.map +7 -0
  11. package/dist/cjs/components/XAdkSender/QuickList.d.ts +16 -0
  12. package/dist/cjs/components/XAdkSender/QuickList.js +105 -0
  13. package/dist/cjs/components/XAdkSender/QuickList.js.map +7 -0
  14. package/dist/cjs/components/XAdkSender/index.d.ts +1 -6
  15. package/dist/cjs/components/XAdkSender/index.js +289 -78
  16. package/dist/cjs/components/XAdkSender/index.js.map +3 -3
  17. package/dist/cjs/components/XAdkSender/styles.d.ts +15 -0
  18. package/dist/cjs/components/XAdkSender/styles.js +184 -5
  19. package/dist/cjs/components/XAdkSender/styles.js.map +2 -2
  20. package/dist/cjs/core/index.d.ts +2 -0
  21. package/dist/cjs/core/index.js +26 -0
  22. package/dist/cjs/core/index.js.map +7 -0
  23. package/dist/cjs/core/protocol/index.d.ts +3 -0
  24. package/dist/cjs/core/protocol/index.js +28 -0
  25. package/dist/cjs/core/protocol/index.js.map +7 -0
  26. package/dist/cjs/core/protocol/messages.d.ts +55 -0
  27. package/dist/cjs/core/protocol/messages.js +307 -0
  28. package/dist/cjs/core/protocol/messages.js.map +7 -0
  29. package/dist/cjs/core/protocol/parts.d.ts +24 -0
  30. package/dist/cjs/core/protocol/parts.js +106 -0
  31. package/dist/cjs/core/protocol/parts.js.map +7 -0
  32. package/dist/cjs/core/protocol/types.d.ts +57 -0
  33. package/dist/cjs/core/protocol/types.js +18 -0
  34. package/dist/cjs/core/protocol/types.js.map +7 -0
  35. package/dist/cjs/core/runtime/createAdkConversationController.d.ts +8 -0
  36. package/dist/cjs/core/runtime/createAdkConversationController.js +424 -0
  37. package/dist/cjs/core/runtime/createAdkConversationController.js.map +7 -0
  38. package/dist/cjs/core/runtime/index.d.ts +2 -0
  39. package/dist/cjs/core/runtime/index.js +26 -0
  40. package/dist/cjs/core/runtime/index.js.map +7 -0
  41. package/dist/cjs/core/runtime/types.d.ts +130 -0
  42. package/dist/cjs/core/runtime/types.js +18 -0
  43. package/dist/cjs/core/runtime/types.js.map +7 -0
  44. package/dist/cjs/{utils/umdEntry.d.ts → entries/umd.d.ts} +7 -0
  45. package/dist/cjs/{utils/umdEntry.js → entries/umd.js} +19 -9
  46. package/dist/cjs/entries/umd.js.map +7 -0
  47. package/dist/cjs/index.d.ts +7 -3
  48. package/dist/cjs/index.js +19 -14
  49. package/dist/cjs/index.js.map +3 -3
  50. package/dist/cjs/presets/xgroup/index.d.ts +4 -0
  51. package/dist/cjs/presets/xgroup/index.js +30 -0
  52. package/dist/cjs/presets/xgroup/index.js.map +7 -0
  53. package/dist/cjs/presets/xgroup/preset.d.ts +15 -0
  54. package/dist/cjs/presets/xgroup/preset.js +69 -0
  55. package/dist/cjs/presets/xgroup/preset.js.map +7 -0
  56. package/dist/cjs/presets/xgroup/strategies.d.ts +8 -0
  57. package/dist/cjs/presets/xgroup/strategies.js +53 -0
  58. package/dist/cjs/presets/xgroup/strategies.js.map +7 -0
  59. package/dist/cjs/presets/xgroup/transport.d.ts +15 -0
  60. package/dist/cjs/presets/xgroup/transport.js +183 -0
  61. package/dist/cjs/presets/xgroup/transport.js.map +7 -0
  62. package/dist/cjs/presets/xgroup/upload.d.ts +8 -0
  63. package/dist/cjs/presets/xgroup/upload.js +65 -0
  64. package/dist/cjs/presets/xgroup/upload.js.map +7 -0
  65. package/dist/cjs/react/index.d.ts +6 -0
  66. package/dist/cjs/react/index.js +53 -0
  67. package/dist/cjs/react/index.js.map +7 -0
  68. package/dist/cjs/react/useAdkConversation.d.ts +27 -0
  69. package/dist/cjs/react/useAdkConversation.js +69 -0
  70. package/dist/cjs/react/useAdkConversation.js.map +7 -0
  71. package/dist/cjs/types/XAdkSender.d.ts +55 -0
  72. package/dist/cjs/types/XAdkSender.js.map +1 -1
  73. package/dist/esm/components/XAdkChatbot/index.js +1 -1
  74. package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
  75. package/dist/esm/components/XAdkProvider/index.js +1 -1
  76. package/dist/esm/components/XAdkProvider/index.js.map +1 -1
  77. package/dist/esm/components/XAdkSender/InlineTagInput.d.ts +24 -0
  78. package/dist/esm/components/XAdkSender/InlineTagInput.js +437 -0
  79. package/dist/esm/components/XAdkSender/InlineTagInput.js.map +1 -0
  80. package/dist/esm/components/XAdkSender/InputTags.d.ts +8 -0
  81. package/dist/esm/components/XAdkSender/InputTags.js +36 -0
  82. package/dist/esm/components/XAdkSender/InputTags.js.map +1 -0
  83. package/dist/esm/components/XAdkSender/QuickList.d.ts +16 -0
  84. package/dist/esm/components/XAdkSender/QuickList.js +96 -0
  85. package/dist/esm/components/XAdkSender/QuickList.js.map +1 -0
  86. package/dist/esm/components/XAdkSender/index.d.ts +1 -6
  87. package/dist/esm/components/XAdkSender/index.js +327 -78
  88. package/dist/esm/components/XAdkSender/index.js.map +1 -1
  89. package/dist/esm/components/XAdkSender/styles.d.ts +15 -0
  90. package/dist/esm/components/XAdkSender/styles.js +29 -11
  91. package/dist/esm/components/XAdkSender/styles.js.map +1 -1
  92. package/dist/esm/core/index.d.ts +2 -0
  93. package/dist/esm/core/index.js +3 -0
  94. package/dist/esm/core/index.js.map +1 -0
  95. package/dist/esm/core/protocol/index.d.ts +3 -0
  96. package/dist/esm/core/protocol/index.js +4 -0
  97. package/dist/esm/core/protocol/index.js.map +1 -0
  98. package/dist/esm/core/protocol/messages.d.ts +55 -0
  99. package/dist/esm/core/protocol/messages.js +315 -0
  100. package/dist/esm/core/protocol/messages.js.map +1 -0
  101. package/dist/esm/core/protocol/parts.d.ts +24 -0
  102. package/dist/esm/core/protocol/parts.js +100 -0
  103. package/dist/esm/core/protocol/parts.js.map +1 -0
  104. package/dist/esm/core/protocol/types.d.ts +57 -0
  105. package/dist/esm/core/protocol/types.js +2 -0
  106. package/dist/esm/core/protocol/types.js.map +1 -0
  107. package/dist/esm/core/runtime/createAdkConversationController.d.ts +8 -0
  108. package/dist/esm/core/runtime/createAdkConversationController.js +742 -0
  109. package/dist/esm/core/runtime/createAdkConversationController.js.map +1 -0
  110. package/dist/esm/core/runtime/index.d.ts +2 -0
  111. package/dist/esm/core/runtime/index.js +3 -0
  112. package/dist/esm/core/runtime/index.js.map +1 -0
  113. package/dist/esm/core/runtime/types.d.ts +130 -0
  114. package/dist/esm/core/runtime/types.js +2 -0
  115. package/dist/esm/core/runtime/types.js.map +1 -0
  116. package/dist/esm/{utils/umdEntry.d.ts → entries/umd.d.ts} +7 -0
  117. package/dist/esm/{utils/umdEntry.js → entries/umd.js} +10 -1
  118. package/dist/esm/entries/umd.js.map +1 -0
  119. package/dist/esm/index.d.ts +7 -3
  120. package/dist/esm/index.js +7 -3
  121. package/dist/esm/index.js.map +1 -1
  122. package/dist/esm/presets/xgroup/index.d.ts +4 -0
  123. package/dist/esm/presets/xgroup/index.js +5 -0
  124. package/dist/esm/presets/xgroup/index.js.map +1 -0
  125. package/dist/esm/presets/xgroup/preset.d.ts +15 -0
  126. package/dist/esm/presets/xgroup/preset.js +44 -0
  127. package/dist/esm/presets/xgroup/preset.js.map +1 -0
  128. package/dist/esm/presets/xgroup/strategies.d.ts +8 -0
  129. package/dist/esm/presets/xgroup/strategies.js +30 -0
  130. package/dist/esm/presets/xgroup/strategies.js.map +1 -0
  131. package/dist/esm/presets/xgroup/transport.d.ts +15 -0
  132. package/dist/esm/presets/xgroup/transport.js +322 -0
  133. package/dist/esm/presets/xgroup/transport.js.map +1 -0
  134. package/dist/esm/presets/xgroup/upload.d.ts +8 -0
  135. package/dist/esm/presets/{xGroupAdk.js → xgroup/upload.js} +9 -63
  136. package/dist/esm/presets/xgroup/upload.js.map +1 -0
  137. package/dist/esm/react/index.d.ts +6 -0
  138. package/dist/esm/react/index.js +5 -0
  139. package/dist/esm/react/index.js.map +1 -0
  140. package/dist/esm/react/useAdkConversation.d.ts +27 -0
  141. package/dist/esm/react/useAdkConversation.js +53 -0
  142. package/dist/esm/react/useAdkConversation.js.map +1 -0
  143. package/dist/esm/types/XAdkSender.d.ts +55 -0
  144. package/dist/esm/types/XAdkSender.js.map +1 -1
  145. package/dist/umd/chat-sdk.min.js +1 -1
  146. package/package.json +36 -2
  147. package/dist/cjs/components/XAdkSender/Switch.d.ts +0 -16
  148. package/dist/cjs/components/XAdkSender/Switch.js +0 -95
  149. package/dist/cjs/components/XAdkSender/Switch.js.map +0 -7
  150. package/dist/cjs/presets/xGroupAdk.d.ts +0 -20
  151. package/dist/cjs/presets/xGroupAdk.js +0 -130
  152. package/dist/cjs/presets/xGroupAdk.js.map +0 -7
  153. package/dist/cjs/utils/umdEntry.js.map +0 -7
  154. package/dist/esm/components/XAdkSender/Switch.d.ts +0 -16
  155. package/dist/esm/components/XAdkSender/Switch.js +0 -53
  156. package/dist/esm/components/XAdkSender/Switch.js.map +0 -1
  157. package/dist/esm/presets/xGroupAdk.d.ts +0 -20
  158. package/dist/esm/presets/xGroupAdk.js.map +0 -1
  159. package/dist/esm/utils/umdEntry.js.map +0 -1
@@ -0,0 +1,183 @@
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/presets/xgroup/transport.ts
20
+ var transport_exports = {};
21
+ __export(transport_exports, {
22
+ createXGroupOpenApiTransport: () => createXGroupOpenApiTransport
23
+ });
24
+ module.exports = __toCommonJS(transport_exports);
25
+ var import_fetch_event_source = require("@microsoft/fetch-event-source");
26
+ var import_constants = require("../../constants");
27
+ var import_api = require("../../services/api");
28
+ var import_utils = require("../../utils");
29
+ var getTokenValue = (token) => typeof token === "function" ? token() : token;
30
+ var normalizeStreamEvent = (rawData) => {
31
+ if ((rawData == null ? void 0 : rawData.data) && (rawData == null ? void 0 : rawData.result)) {
32
+ return {
33
+ ...rawData.data,
34
+ content: rawData.data,
35
+ invocationId: rawData.result.invocationId,
36
+ sessionId: rawData.result.sessionId,
37
+ id: rawData.data.id || rawData.result.id || rawData.result.eventId || rawData.result.invocationId
38
+ };
39
+ }
40
+ return rawData;
41
+ };
42
+ var createXGroupOpenApiTransport = ({
43
+ url,
44
+ appNo,
45
+ token,
46
+ pageSize = import_constants.SESSION_PAGE_SIZE,
47
+ onAuthError
48
+ }) => {
49
+ const getAuthHeaders = () => {
50
+ const tokenValue = getTokenValue(token);
51
+ return tokenValue ? { Authorization: `Bearer ${tokenValue}` } : {};
52
+ };
53
+ return {
54
+ fetchAppConfig: async () => {
55
+ const { data, result } = await (0, import_api.fetchAppConfig)({ url, appNo });
56
+ if ((result == null ? void 0 : result.code) !== import_constants.API_SUCCESS_CODE) {
57
+ throw Object.assign(new Error((result == null ? void 0 : result.message) || "获取应用配置失败"), {
58
+ code: result == null ? void 0 : result.code,
59
+ raw: result
60
+ });
61
+ }
62
+ return data;
63
+ },
64
+ fetchSessions: async (params) => {
65
+ const { data = [], pagination, result } = await (0, import_api.fetchSessionList)({
66
+ url,
67
+ appNo,
68
+ token: getTokenValue(token) || "",
69
+ pageNum: (params == null ? void 0 : params.pageNum) || 1,
70
+ pageSize: (params == null ? void 0 : params.pageSize) || pageSize
71
+ });
72
+ if ((result == null ? void 0 : result.code) !== import_constants.API_SUCCESS_CODE) {
73
+ throw Object.assign(new Error((result == null ? void 0 : result.message) || "获取会话列表失败"), {
74
+ code: result == null ? void 0 : result.code,
75
+ raw: result
76
+ });
77
+ }
78
+ return { data, pagination };
79
+ },
80
+ fetchSessionEvents: async (sessionId) => {
81
+ const { data = [], result } = await (0, import_api.fetchSessionDetail)({
82
+ url,
83
+ appNo,
84
+ sessionId,
85
+ token: getTokenValue(token) || ""
86
+ });
87
+ if ((result == null ? void 0 : result.code) !== import_constants.API_SUCCESS_CODE) {
88
+ throw Object.assign(new Error((result == null ? void 0 : result.message) || "获取会话详情失败"), {
89
+ code: result == null ? void 0 : result.code,
90
+ raw: result
91
+ });
92
+ }
93
+ return data;
94
+ },
95
+ sendMessageStreaming: (payload, handlers) => new Promise((resolve, reject) => {
96
+ void (0, import_fetch_event_source.fetchEventSource)(
97
+ `${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/sendMsgStreaming`,
98
+ {
99
+ method: "POST",
100
+ signal: handlers.signal,
101
+ body: JSON.stringify(payload),
102
+ openWhenHidden: true,
103
+ headers: {
104
+ "Content-Type": "application/json",
105
+ "Cache-Control": "no-cache",
106
+ stream: payload.stream === false ? "false" : "true",
107
+ ...getAuthHeaders()
108
+ },
109
+ async onopen(response) {
110
+ var _a;
111
+ (_a = handlers.onOpen) == null ? void 0 : _a.call(handlers, response);
112
+ if (response.ok && response.headers.get("content-type") === import_fetch_event_source.EventStreamContentType) {
113
+ return;
114
+ }
115
+ if (response.status === 401 || response.status === 403) {
116
+ onAuthError == null ? void 0 : onAuthError(response);
117
+ }
118
+ throw Object.assign(
119
+ new Error(`流式请求失败 (${response.status})`),
120
+ { status: response.status }
121
+ );
122
+ },
123
+ onmessage: (event) => {
124
+ var _a;
125
+ const rawData = (0, import_utils.safeJsonParse)(event.data, {});
126
+ const chunk = normalizeStreamEvent(rawData);
127
+ if (chunk.error) {
128
+ (_a = handlers.onError) == null ? void 0 : _a.call(handlers, chunk.error);
129
+ return;
130
+ }
131
+ handlers.onEvent(chunk);
132
+ },
133
+ onclose: () => {
134
+ var _a;
135
+ (_a = handlers.onClose) == null ? void 0 : _a.call(handlers);
136
+ resolve();
137
+ },
138
+ onerror: (error) => {
139
+ var _a;
140
+ (_a = handlers.onError) == null ? void 0 : _a.call(handlers, error);
141
+ reject(error);
142
+ throw error;
143
+ }
144
+ }
145
+ );
146
+ }),
147
+ closeSession: async (sessionId) => {
148
+ const { result } = await (0, import_api.closeSession)({
149
+ url,
150
+ appNo,
151
+ sessionId,
152
+ token: getTokenValue(token) || ""
153
+ });
154
+ return (result == null ? void 0 : result.code) === import_constants.API_SUCCESS_CODE;
155
+ },
156
+ updateSessionTitle: async (sessionId, title) => {
157
+ const { result } = await (0, import_api.updateSessionTitle)({
158
+ url,
159
+ appNo,
160
+ sessionId,
161
+ title,
162
+ token: getTokenValue(token) || ""
163
+ });
164
+ return (result == null ? void 0 : result.code) === import_constants.API_SUCCESS_CODE;
165
+ },
166
+ feedback: async ({ invocationId, isLike, ...feedbackData }) => {
167
+ const { result } = await (0, import_api.addFeedback)({
168
+ url,
169
+ appNo,
170
+ token: getTokenValue(token) || "",
171
+ requestId: invocationId,
172
+ isLike,
173
+ ...feedbackData
174
+ });
175
+ return (result == null ? void 0 : result.code) === import_constants.API_SUCCESS_CODE;
176
+ }
177
+ };
178
+ };
179
+ // Annotate the CommonJS export names for ESM import in node:
180
+ 0 && (module.exports = {
181
+ createXGroupOpenApiTransport
182
+ });
183
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/presets/xgroup/transport.ts"],
4
+ "sourcesContent": ["import {\n EventStreamContentType,\n fetchEventSource,\n} from \"@microsoft/fetch-event-source\";\nimport { API_SUCCESS_CODE, SESSION_PAGE_SIZE } from \"@/constants\";\nimport {\n addFeedback,\n closeSession,\n fetchAppConfig,\n fetchSessionDetail,\n fetchSessionList,\n updateSessionTitle,\n} from \"@/services/api\";\nimport type { Event } from \"@/types\";\nimport { safeJsonParse } from \"@/utils\";\nimport type { AdkChatTransport } from \"@/core/runtime\";\n\nexport interface XGroupOpenApiTransportOptions {\n url: string;\n appNo: string;\n token?: string | (() => string | undefined);\n pageSize?: number;\n onAuthError?: (response: Response) => void;\n}\n\n/** 支持传入 token 字符串或 token getter,便于业务侧刷新 token 后无需重建 transport。 */\nconst getTokenValue = (token?: string | (() => string | undefined)) =>\n typeof token === \"function\" ? token() : token;\n\n/**\n * 兼容后端新旧两种 stream 包装格式。\n * 新格式通常是 { data, result },runtime 只消费标准 ADK Event。\n */\nconst normalizeStreamEvent = (rawData: any): Event => {\n if (rawData?.data && rawData?.result) {\n return {\n ...rawData.data,\n content: rawData.data,\n invocationId: rawData.result.invocationId,\n sessionId: rawData.result.sessionId,\n id:\n rawData.data.id ||\n rawData.result.id ||\n rawData.result.eventId ||\n rawData.result.invocationId,\n };\n }\n return rawData;\n};\n\n/**\n * 众安信科 openApi 默认 transport。\n *\n * 这层只负责把 SDK 标准 transport 接口映射到当前网关接口;\n * 其它业务项目不要复制 useADKChat,只需要实现自己的 transport 即可。\n */\nexport const createXGroupOpenApiTransport = ({\n url,\n appNo,\n token,\n pageSize = SESSION_PAGE_SIZE,\n onAuthError,\n}: XGroupOpenApiTransportOptions): AdkChatTransport => {\n const getAuthHeaders = () => {\n const tokenValue = getTokenValue(token);\n return tokenValue ? { Authorization: `Bearer ${tokenValue}` } : {};\n };\n\n return {\n fetchAppConfig: async () => {\n const { data, result } = await fetchAppConfig({ url, appNo });\n if (result?.code !== API_SUCCESS_CODE) {\n throw Object.assign(new Error(result?.message || \"获取应用配置失败\"), {\n code: result?.code,\n raw: result,\n });\n }\n return data as any;\n },\n fetchSessions: async (params) => {\n const { data = [], pagination, result } = await fetchSessionList({\n url,\n appNo,\n token: getTokenValue(token) || \"\",\n pageNum: params?.pageNum || 1,\n pageSize: params?.pageSize || pageSize,\n });\n if (result?.code !== API_SUCCESS_CODE) {\n throw Object.assign(new Error(result?.message || \"获取会话列表失败\"), {\n code: result?.code,\n raw: result,\n });\n }\n return { data: data as any, pagination };\n },\n fetchSessionEvents: async (sessionId) => {\n const { data = [], result } = await fetchSessionDetail({\n url,\n appNo,\n sessionId,\n token: getTokenValue(token) || \"\",\n });\n if (result?.code !== API_SUCCESS_CODE) {\n throw Object.assign(new Error(result?.message || \"获取会话详情失败\"), {\n code: result?.code,\n raw: result,\n });\n }\n return data as Event[];\n },\n sendMessageStreaming: (payload, handlers) =>\n new Promise<void>((resolve, reject) => {\n void fetchEventSource(\n `${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/sendMsgStreaming`,\n {\n method: \"POST\",\n signal: handlers.signal,\n body: JSON.stringify(payload),\n openWhenHidden: true,\n headers: {\n \"Content-Type\": \"application/json\",\n \"Cache-Control\": \"no-cache\",\n stream: payload.stream === false ? \"false\" : \"true\",\n ...getAuthHeaders(),\n } as Record<string, string>,\n async onopen(response) {\n handlers.onOpen?.(response);\n if (\n response.ok &&\n response.headers.get(\"content-type\") === EventStreamContentType\n ) {\n return;\n }\n if (response.status === 401 || response.status === 403) {\n onAuthError?.(response);\n }\n throw Object.assign(\n new Error(`流式请求失败 (${response.status})`),\n { status: response.status },\n );\n },\n onmessage: (event) => {\n const rawData = safeJsonParse(event.data, {});\n const chunk = normalizeStreamEvent(rawData);\n if (chunk.error) {\n // transport 不直接弹 UI,错误交给 runtime callbacks 或业务层处理。\n handlers.onError?.(chunk.error);\n return;\n }\n handlers.onEvent(chunk);\n },\n onclose: () => {\n handlers.onClose?.();\n resolve();\n },\n onerror: (error) => {\n handlers.onError?.(error);\n reject(error);\n throw error;\n },\n },\n );\n }),\n closeSession: async (sessionId) => {\n const { result } = await closeSession({\n url,\n appNo,\n sessionId,\n token: getTokenValue(token) || \"\",\n });\n return result?.code === API_SUCCESS_CODE;\n },\n updateSessionTitle: async (sessionId, title) => {\n const { result } = await updateSessionTitle({\n url,\n appNo,\n sessionId,\n title,\n token: getTokenValue(token) || \"\",\n });\n return result?.code === API_SUCCESS_CODE;\n },\n feedback: async ({ invocationId, isLike, ...feedbackData }) => {\n const { result } = await addFeedback({\n url,\n appNo,\n token: getTokenValue(token) || \"\",\n requestId: invocationId,\n isLike,\n ...feedbackData,\n });\n return result?.code === API_SUCCESS_CODE;\n },\n };\n};\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,8 @@
1
+ import type { UploadRequestFn } from "../../types";
2
+ export interface XGroupUploadRequestOptions {
3
+ url: string;
4
+ token?: string;
5
+ appNo?: string;
6
+ }
7
+ /** 众安信科预设上传:upload=true 且具备 appNo/token 时可自动接入默认附件接口。 */
8
+ export declare const createXGroupUploadRequest: ({ url, token, appNo, }: XGroupUploadRequestOptions) => UploadRequestFn | undefined;
@@ -0,0 +1,65 @@
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/presets/xgroup/upload.ts
20
+ var upload_exports = {};
21
+ __export(upload_exports, {
22
+ createXGroupUploadRequest: () => createXGroupUploadRequest
23
+ });
24
+ module.exports = __toCommonJS(upload_exports);
25
+ var createXGroupUploadRequest = ({
26
+ url,
27
+ token,
28
+ appNo
29
+ }) => {
30
+ if (!appNo || !token)
31
+ return void 0;
32
+ return async ({ file, onProgress, onSuccess, onError }) => {
33
+ try {
34
+ onProgress == null ? void 0 : onProgress({ percent: 0 });
35
+ const formData = new FormData();
36
+ formData.append("file", file);
37
+ const response = await fetch(
38
+ `${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/uploadMultiFile`,
39
+ {
40
+ method: "POST",
41
+ body: formData,
42
+ headers: {
43
+ Accept: "application/json, text/plain, */*",
44
+ Authorization: `Bearer ${token}`,
45
+ "Cache-Control": "no-cache"
46
+ }
47
+ }
48
+ );
49
+ const result = await response.json().catch(() => ({}));
50
+ if (!response.ok) {
51
+ throw new Error((result == null ? void 0 : result.message) || `文件上传失败 (${response.status})`);
52
+ }
53
+ const uploadedFile = Array.isArray(result == null ? void 0 : result.data) ? result.data[0] : (result == null ? void 0 : result.data) ?? result;
54
+ onProgress == null ? void 0 : onProgress({ percent: 100 });
55
+ onSuccess == null ? void 0 : onSuccess(uploadedFile);
56
+ } catch (error) {
57
+ onError == null ? void 0 : onError(error instanceof Error ? error : new Error("文件上传失败"));
58
+ }
59
+ };
60
+ };
61
+ // Annotate the CommonJS export names for ESM import in node:
62
+ 0 && (module.exports = {
63
+ createXGroupUploadRequest
64
+ });
65
+ //# sourceMappingURL=upload.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/presets/xgroup/upload.ts"],
4
+ "sourcesContent": ["import type { UploadRequestFn } from \"@/types\";\n\nexport interface XGroupUploadRequestOptions {\n url: string;\n token?: string;\n appNo?: string;\n}\n\n/** 众安信科预设上传:upload=true 且具备 appNo/token 时可自动接入默认附件接口。 */\nexport const createXGroupUploadRequest = ({\n url,\n token,\n appNo,\n}: XGroupUploadRequestOptions): UploadRequestFn | undefined => {\n if (!appNo || !token) return undefined;\n\n return async ({ file, onProgress, onSuccess, onError }) => {\n try {\n onProgress?.({ percent: 0 });\n\n const formData = new FormData();\n formData.append(\"file\", file);\n\n const response = await fetch(\n `${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/uploadMultiFile`,\n {\n method: \"POST\",\n body: formData,\n headers: {\n Accept: \"application/json, text/plain, */*\",\n Authorization: `Bearer ${token}`,\n \"Cache-Control\": \"no-cache\",\n },\n },\n );\n\n const result = await response.json().catch(() => ({}));\n\n if (!response.ok) {\n throw new Error(result?.message || `文件上传失败 (${response.status})`);\n }\n\n const uploadedFile = Array.isArray(result?.data)\n ? result.data[0]\n : (result?.data ?? result);\n\n onProgress?.({ percent: 100 });\n onSuccess?.(uploadedFile);\n } catch (error) {\n onError?.(error instanceof Error ? error : new Error(\"文件上传失败\"));\n }\n };\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AASO,IAAM,4BAA4B,CAAC;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AACF,MAA+D;AAC7D,MAAI,CAAC,SAAS,CAAC;AAAO,WAAO;AAE7B,SAAO,OAAO,EAAE,MAAM,YAAY,WAAW,QAAQ,MAAM;AACzD,QAAI;AACF,+CAAa,EAAE,SAAS,EAAE;AAE1B,YAAM,WAAW,IAAI,SAAS;AAC9B,eAAS,OAAO,QAAQ,IAAI;AAE5B,YAAM,WAAW,MAAM;AAAA,QACrB,GAAG,2CAA2C;AAAA,QAC9C;AAAA,UACE,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,SAAS;AAAA,YACP,QAAQ;AAAA,YACR,eAAe,UAAU;AAAA,YACzB,iBAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAEA,YAAM,SAAS,MAAM,SAAS,KAAK,EAAE,MAAM,OAAO,CAAC,EAAE;AAErD,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,IAAI,OAAM,iCAAQ,YAAW,WAAW,SAAS,SAAS;AAAA,MAClE;AAEA,YAAM,eAAe,MAAM,QAAQ,iCAAQ,IAAI,IAC3C,OAAO,KAAK,CAAC,KACZ,iCAAQ,SAAQ;AAErB,+CAAa,EAAE,SAAS,IAAI;AAC5B,6CAAY;AAAA,IACd,SAAS,OAAP;AACA,yCAAU,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,QAAQ;AAAA,IAC/D;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,6 @@
1
+ export { default as useAdkConversation } from "./useAdkConversation";
2
+ export type { UseAdkConversationResult } from "./useAdkConversation";
3
+ export { default as useADKChat } from "../hooks/useADKChat";
4
+ export { default as useEventStreamRequest } from "../hooks/useEventStreamRequest";
5
+ export { useChatActions, useChatState, useSession, } from "../components/XAdkProvider/context";
6
+ export type { ChatHookFactory, ChatHookResult } from "../types/ChatHook";
@@ -0,0 +1,53 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/react/index.ts
30
+ var react_exports = {};
31
+ __export(react_exports, {
32
+ useADKChat: () => import_useADKChat.default,
33
+ useAdkConversation: () => import_useAdkConversation.default,
34
+ useChatActions: () => import_context.useChatActions,
35
+ useChatState: () => import_context.useChatState,
36
+ useEventStreamRequest: () => import_useEventStreamRequest.default,
37
+ useSession: () => import_context.useSession
38
+ });
39
+ module.exports = __toCommonJS(react_exports);
40
+ var import_useAdkConversation = __toESM(require("./useAdkConversation"));
41
+ var import_useADKChat = __toESM(require("../hooks/useADKChat"));
42
+ var import_useEventStreamRequest = __toESM(require("../hooks/useEventStreamRequest"));
43
+ var import_context = require("../components/XAdkProvider/context");
44
+ // Annotate the CommonJS export names for ESM import in node:
45
+ 0 && (module.exports = {
46
+ useADKChat,
47
+ useAdkConversation,
48
+ useChatActions,
49
+ useChatState,
50
+ useEventStreamRequest,
51
+ useSession
52
+ });
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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;",
6
+ "names": []
7
+ }
@@ -0,0 +1,27 @@
1
+ import { type AdkConversationController, type AdkConversationOptions, type AdkConversationState } from "../core/runtime";
2
+ export interface UseAdkConversationResult extends AdkConversationState {
3
+ controller: AdkConversationController;
4
+ startChat: AdkConversationController["startChat"];
5
+ stopChat: AdkConversationController["stopChat"];
6
+ reChat: AdkConversationController["reChat"];
7
+ clearChat: AdkConversationController["clearChat"];
8
+ suggestChat: AdkConversationController["suggestChat"];
9
+ confirmFnCall: AdkConversationController["confirmFnCall"];
10
+ switchSession: AdkConversationController["switchSession"];
11
+ setCurrentSession: AdkConversationController["setCurrentSession"];
12
+ replaceSessionEvents: AdkConversationController["replaceSessionEvents"];
13
+ syncSessionEvents: AdkConversationController["syncSessionEvents"];
14
+ deleteSession: AdkConversationController["deleteSession"];
15
+ updateSession: AdkConversationController["updateSession"];
16
+ likeMessage: AdkConversationController["likeMessage"];
17
+ setMessages: AdkConversationController["setMessages"];
18
+ setStateDelta: AdkConversationController["setStateDelta"];
19
+ }
20
+ /**
21
+ * React 绑定层:把无框架的 AdkConversationController 包装成 Hook。
22
+ *
23
+ * 注意:controller 只在首次渲染创建一次;如果业务需要切换 transport / requestBuilder,
24
+ * 建议在外层通过 key 重新挂载组件,避免对话进行中替换数据流内核。
25
+ */
26
+ export declare const useAdkConversation: (options: AdkConversationOptions) => UseAdkConversationResult;
27
+ export default useAdkConversation;
@@ -0,0 +1,69 @@
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/react/useAdkConversation.ts
20
+ var useAdkConversation_exports = {};
21
+ __export(useAdkConversation_exports, {
22
+ default: () => useAdkConversation_default,
23
+ useAdkConversation: () => useAdkConversation
24
+ });
25
+ module.exports = __toCommonJS(useAdkConversation_exports);
26
+ var import_react = require("react");
27
+ var import_runtime = require("../core/runtime");
28
+ var useAdkConversation = (options) => {
29
+ const controllerRef = (0, import_react.useRef)(null);
30
+ if (!controllerRef.current) {
31
+ controllerRef.current = (0, import_runtime.createAdkConversationController)(options);
32
+ }
33
+ const controller = controllerRef.current;
34
+ const [snapshot, setSnapshot] = (0, import_react.useState)(() => controller.getSnapshot());
35
+ (0, import_react.useEffect)(() => {
36
+ setSnapshot(controller.getSnapshot());
37
+ const unsubscribe = controller.subscribe(setSnapshot);
38
+ void controller.init();
39
+ return () => {
40
+ unsubscribe();
41
+ controller.destroy();
42
+ };
43
+ }, [controller]);
44
+ return {
45
+ ...snapshot,
46
+ controller,
47
+ startChat: controller.startChat,
48
+ stopChat: controller.stopChat,
49
+ reChat: controller.reChat,
50
+ clearChat: controller.clearChat,
51
+ suggestChat: controller.suggestChat,
52
+ confirmFnCall: controller.confirmFnCall,
53
+ switchSession: controller.switchSession,
54
+ setCurrentSession: controller.setCurrentSession,
55
+ replaceSessionEvents: controller.replaceSessionEvents,
56
+ syncSessionEvents: controller.syncSessionEvents,
57
+ deleteSession: controller.deleteSession,
58
+ updateSession: controller.updateSession,
59
+ likeMessage: controller.likeMessage,
60
+ setMessages: controller.setMessages,
61
+ setStateDelta: controller.setStateDelta
62
+ };
63
+ };
64
+ var useAdkConversation_default = useAdkConversation;
65
+ // Annotate the CommonJS export names for ESM import in node:
66
+ 0 && (module.exports = {
67
+ useAdkConversation
68
+ });
69
+ //# sourceMappingURL=useAdkConversation.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/react/useAdkConversation.ts"],
4
+ "sourcesContent": ["import { useEffect, useRef, useState } from \"react\";\nimport {\n createAdkConversationController,\n type AdkConversationController,\n type AdkConversationOptions,\n type AdkConversationState,\n} from \"@/core/runtime\";\n\nexport interface UseAdkConversationResult extends AdkConversationState {\n controller: AdkConversationController;\n startChat: AdkConversationController[\"startChat\"];\n stopChat: AdkConversationController[\"stopChat\"];\n reChat: AdkConversationController[\"reChat\"];\n clearChat: AdkConversationController[\"clearChat\"];\n suggestChat: AdkConversationController[\"suggestChat\"];\n confirmFnCall: AdkConversationController[\"confirmFnCall\"];\n switchSession: AdkConversationController[\"switchSession\"];\n setCurrentSession: AdkConversationController[\"setCurrentSession\"];\n replaceSessionEvents: AdkConversationController[\"replaceSessionEvents\"];\n syncSessionEvents: AdkConversationController[\"syncSessionEvents\"];\n deleteSession: AdkConversationController[\"deleteSession\"];\n updateSession: AdkConversationController[\"updateSession\"];\n likeMessage: AdkConversationController[\"likeMessage\"];\n setMessages: AdkConversationController[\"setMessages\"];\n setStateDelta: AdkConversationController[\"setStateDelta\"];\n}\n\n/**\n * React 绑定层:把无框架的 AdkConversationController 包装成 Hook。\n *\n * 注意:controller 只在首次渲染创建一次;如果业务需要切换 transport / requestBuilder,\n * 建议在外层通过 key 重新挂载组件,避免对话进行中替换数据流内核。\n */\nexport const useAdkConversation = (\n options: AdkConversationOptions,\n): UseAdkConversationResult => {\n const controllerRef = useRef<AdkConversationController | null>(null);\n if (!controllerRef.current) {\n controllerRef.current = createAdkConversationController(options);\n }\n const controller = controllerRef.current;\n const [snapshot, setSnapshot] = useState(() => controller.getSnapshot());\n\n useEffect(() => {\n // 订阅 controller 状态变化,并在组件卸载时销毁流式连接和轮询。\n setSnapshot(controller.getSnapshot());\n const unsubscribe = controller.subscribe(setSnapshot);\n void controller.init();\n return () => {\n unsubscribe();\n controller.destroy();\n };\n }, [controller]);\n\n return {\n ...snapshot,\n controller,\n startChat: controller.startChat,\n stopChat: controller.stopChat,\n reChat: controller.reChat,\n clearChat: controller.clearChat,\n suggestChat: controller.suggestChat,\n confirmFnCall: controller.confirmFnCall,\n switchSession: controller.switchSession,\n setCurrentSession: controller.setCurrentSession,\n replaceSessionEvents: controller.replaceSessionEvents,\n syncSessionEvents: controller.syncSessionEvents,\n deleteSession: controller.deleteSession,\n updateSession: controller.updateSession,\n likeMessage: controller.likeMessage,\n setMessages: controller.setMessages,\n setStateDelta: controller.setStateDelta,\n };\n};\n\nexport default useAdkConversation;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA4C;AAC5C,qBAKO;AA2BA,IAAM,qBAAqB,CAChC,YAC6B;AAC7B,QAAM,oBAAgB,qBAAyC,IAAI;AACnE,MAAI,CAAC,cAAc,SAAS;AAC1B,kBAAc,cAAU,gDAAgC,OAAO;AAAA,EACjE;AACA,QAAM,aAAa,cAAc;AACjC,QAAM,CAAC,UAAU,WAAW,QAAI,uBAAS,MAAM,WAAW,YAAY,CAAC;AAEvE,8BAAU,MAAM;AAEd,gBAAY,WAAW,YAAY,CAAC;AACpC,UAAM,cAAc,WAAW,UAAU,WAAW;AACpD,SAAK,WAAW,KAAK;AACrB,WAAO,MAAM;AACX,kBAAY;AACZ,iBAAW,QAAQ;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,UAAU,CAAC;AAEf,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA,WAAW,WAAW;AAAA,IACtB,UAAU,WAAW;AAAA,IACrB,QAAQ,WAAW;AAAA,IACnB,WAAW,WAAW;AAAA,IACtB,aAAa,WAAW;AAAA,IACxB,eAAe,WAAW;AAAA,IAC1B,eAAe,WAAW;AAAA,IAC1B,mBAAmB,WAAW;AAAA,IAC9B,sBAAsB,WAAW;AAAA,IACjC,mBAAmB,WAAW;AAAA,IAC9B,eAAe,WAAW;AAAA,IAC1B,eAAe,WAAW;AAAA,IAC1B,aAAa,WAAW;AAAA,IACxB,aAAa,WAAW;AAAA,IACxB,eAAe,WAAW;AAAA,EAC5B;AACF;AAEA,IAAO,6BAAQ;",
6
+ "names": []
7
+ }
@@ -1,4 +1,41 @@
1
1
  import React from "react";
2
+ /** 快捷键触发的列表项 */
3
+ export interface QuickListOption {
4
+ id: string;
5
+ label: string;
6
+ description?: string;
7
+ icon?: React.ReactNode;
8
+ /** 分组名(用于聚合列表,子分组通过下划线分割) */
9
+ group?: string;
10
+ [key: string]: any;
11
+ }
12
+ /** 快捷键配置 */
13
+ export interface QuickKeyConfig {
14
+ /** 触发字符,如 '@', '#', '$' */
15
+ key: string;
16
+ /** 列表标题 */
17
+ title?: string;
18
+ /** 列表数据 */
19
+ options: QuickListOption[];
20
+ /** 自定义列表项渲染 */
21
+ renderItem?: (option: QuickListOption) => React.ReactNode;
22
+ /** 选中回调 */
23
+ onSelect?: (option: QuickListOption) => void;
24
+ }
25
+ /** 输入框内标签 */
26
+ export interface InputTag {
27
+ id: string;
28
+ label: string;
29
+ /** 标签类型,如 'aggregation', 'skill', 'app' */
30
+ type: string;
31
+ color?: string;
32
+ icon?: React.ReactNode;
33
+ /** 原始数据 */
34
+ data?: any;
35
+ }
36
+ export interface InlineTagRenderInfo {
37
+ onRemove: () => void;
38
+ }
2
39
  export interface UploadFileResult {
3
40
  fileName?: string;
4
41
  fileId?: string | number;
@@ -76,6 +113,7 @@ export interface SenderUIProps {
76
113
  draggable?: boolean;
77
114
  loading?: boolean;
78
115
  disabled?: boolean;
116
+ placeholder?: string;
79
117
  /** 受控:输入框的值 */
80
118
  value?: string;
81
119
  /** 非受控:输入框默认值 */
@@ -85,6 +123,7 @@ export interface SenderUIProps {
85
123
  onSubmit?: (data: {
86
124
  text: string;
87
125
  files: ServerFile[];
126
+ tags?: InputTag[];
88
127
  }) => void;
89
128
  onStop?: () => void;
90
129
  /** 自定义发送按钮渲染 */
@@ -104,6 +143,22 @@ export interface SenderUIProps {
104
143
  prefix?: React.ReactNode | false | SlotRenderFunction;
105
144
  /** 底部内容 */
106
145
  footer?: React.ReactNode | false | SlotRenderFunction;
146
+ /** 底部左侧拓展区域,不传时 footer 保持原有居中布局 */
147
+ footerLeft?: React.ReactNode | false | SlotRenderFunction;
148
+ /** 快捷键配置列表 */
149
+ quickKeys?: QuickKeyConfig[];
150
+ /** 是否把标签以内联 token 形式展示在输入区内;默认 false 保持历史 textarea 行为 */
151
+ inlineTags?: boolean;
152
+ /** 自定义内联标签渲染 */
153
+ renderTag?: (tag: InputTag, info: InlineTagRenderInfo) => React.ReactNode;
154
+ /** 受控:标签列表 */
155
+ tags?: InputTag[];
156
+ /** 非受控:默认标签列表 */
157
+ defaultTags?: InputTag[];
158
+ /** 标签变化回调 */
159
+ onTagsChange?: (tags: InputTag[]) => void;
160
+ /** 快捷键触发回调(业务方可在此处理搜索等逻辑) */
161
+ onQuickKeyTrigger?: (key: string, keyword: string) => void;
107
162
  }
108
163
  export type XAdkSenderProps = SenderUIProps & UploaderCoreProps;
109
164
  export interface XAdkSenderHandle {
@@ -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\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 UploadButton: 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 allowUpload?: boolean;\n /** 是否启用 Sender 自身的拖拽上传,设为 false 时由外层(如 DefaultLayout)管理拖拽 */\n draggable?: boolean;\n loading?: boolean;\n disabled?: boolean; // 只读状态\n /** 受控:输入框的值 */\n value?: string;\n /** 非受控:输入框默认值 */\n defaultValue?: string;\n onClear?: () => void;\n onChange?: (value: string) => void;\n onSubmit?: (data: { text: string; files: ServerFile[] }) => 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}\n\nexport type XAdkSenderProps = SenderUIProps & UploaderCoreProps;\n\nexport interface XAdkSenderHandle {\n addFiles: (files: File[]) => void;\n}\n"],
4
+ "sourcesContent": ["// types/XAdkSender.ts\nimport React from \"react\";\n\n// ===================== 快捷键/标签相关类型 =====================\n\n/** 快捷键触发的列表项 */\nexport interface QuickListOption {\n id: string;\n label: string;\n description?: string;\n icon?: React.ReactNode;\n /** 分组名(用于聚合列表,子分组通过下划线分割) */\n group?: string;\n [key: string]: any;\n}\n\n/** 快捷键配置 */\nexport interface QuickKeyConfig {\n /** 触发字符,如 '@', '#', '$' */\n key: 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/** 输入框内标签 */\nexport interface InputTag {\n id: string;\n label: string;\n /** 标签类型,如 'aggregation', 'skill', 'app' */\n type: string;\n color?: string;\n icon?: React.ReactNode;\n /** 原始数据 */\n data?: any;\n}\n\nexport interface InlineTagRenderInfo {\n onRemove: () => void;\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 UploadButton: 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 allowUpload?: boolean;\n /** 是否启用 Sender 自身的拖拽上传,设为 false 时由外层(如 DefaultLayout)管理拖拽 */\n draggable?: boolean;\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: {\n text: string;\n files: ServerFile[];\n tags?: InputTag[];\n }) => 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 // 快捷键/标签功能\n /** 快捷键配置列表 */\n quickKeys?: QuickKeyConfig[];\n /** 是否把标签以内联 token 形式展示在输入区内;默认 false 保持历史 textarea 行为 */\n inlineTags?: boolean;\n /** 自定义内联标签渲染 */\n renderTag?: (\n tag: InputTag,\n info: InlineTagRenderInfo,\n ) => React.ReactNode;\n /** 受控:标签列表 */\n tags?: InputTag[];\n /** 非受控:默认标签列表 */\n defaultTags?: InputTag[];\n /** 标签变化回调 */\n onTagsChange?: (tags: InputTag[]) => void;\n /** 快捷键触发回调(业务方可在此处理搜索等逻辑) */\n onQuickKeyTrigger?: (key: string, keyword: string) => void;\n}\n\nexport type XAdkSenderProps = SenderUIProps & UploaderCoreProps;\n\nexport interface XAdkSenderHandle {\n addFiles: (files: File[]) => void;\n}\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;",
6
6
  "names": []
7
7
  }
@@ -11,7 +11,7 @@ import FunctionCallRender from "./components/FunctionCallRender";
11
11
  import FileGallery from "../FileGallery";
12
12
  import XAdkThoughtChain from "../XAdkThoughtChain";
13
13
  import { parseAgentMessage } from "../../utils";
14
- import { mergeChatStrategies } from "../../presets/xGroupAdk";
14
+ import { mergeChatStrategies } from "../../presets/xgroup";
15
15
  import { defaultToolKindResolver } from "../../types/FunctionCallRender";
16
16
  import { jsx as _jsx } from "react/jsx-runtime";
17
17
  import { jsxs as _jsxs } from "react/jsx-runtime";