@ai-group/chat-sdk 2.1.13 → 2.1.14

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 (68) hide show
  1. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/index.d.ts +1 -1
  2. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/index.js +41 -5
  3. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/index.js.map +2 -2
  4. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/styles.d.ts +1 -0
  5. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/styles.js +14 -3
  6. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/styles.js.map +2 -2
  7. package/dist/cjs/components/XAdkChatbot/index.d.ts +1 -1
  8. package/dist/cjs/components/XAdkChatbot/index.js +30 -13
  9. package/dist/cjs/components/XAdkChatbot/index.js.map +3 -3
  10. package/dist/cjs/components/XAdkWebProvider/XAdkWebProvider.stories.d.ts +2 -2
  11. package/dist/cjs/components/XAdkWebProvider/XAdkWebProvider.stories.js +26 -9
  12. package/dist/cjs/components/XAdkWebProvider/XAdkWebProvider.stories.js.map +2 -2
  13. package/dist/cjs/components/XAiThoughtChain/XAiThoughtChain.stories.d.ts +6 -0
  14. package/dist/cjs/components/XAiThoughtChain/XAiThoughtChain.stories.js +180 -0
  15. package/dist/cjs/components/XAiThoughtChain/XAiThoughtChain.stories.js.map +7 -0
  16. package/dist/cjs/components/XAiThoughtChain/index.d.ts +4 -0
  17. package/dist/cjs/components/XAiThoughtChain/index.js +155 -0
  18. package/dist/cjs/components/XAiThoughtChain/index.js.map +7 -0
  19. package/dist/cjs/components/XAiThoughtChain/styles.d.ts +60 -0
  20. package/dist/cjs/components/XAiThoughtChain/styles.js +195 -0
  21. package/dist/cjs/components/XAiThoughtChain/styles.js.map +7 -0
  22. package/dist/cjs/hooks/useADKChat.d.ts +2 -2
  23. package/dist/cjs/hooks/useADKChat.js +228 -180
  24. package/dist/cjs/hooks/useADKChat.js.map +2 -2
  25. package/dist/cjs/types/XAiThoughtChain.d.ts +25 -0
  26. package/dist/cjs/types/XAiThoughtChain.js +18 -0
  27. package/dist/cjs/types/XAiThoughtChain.js.map +7 -0
  28. package/dist/cjs/types/index.d.ts +9 -8
  29. package/dist/cjs/types/index.js +2 -0
  30. package/dist/cjs/types/index.js.map +2 -2
  31. package/dist/cjs/utils/index.d.ts +1 -0
  32. package/dist/cjs/utils/index.js +7 -0
  33. package/dist/cjs/utils/index.js.map +2 -2
  34. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.d.ts +1 -1
  35. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.js +17 -15
  36. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.js.map +1 -1
  37. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/styles.d.ts +1 -0
  38. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/styles.js +7 -6
  39. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/styles.js.map +1 -1
  40. package/dist/esm/components/XAdkChatbot/index.d.ts +1 -1
  41. package/dist/esm/components/XAdkChatbot/index.js +20 -18
  42. package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
  43. package/dist/esm/components/XAdkWebProvider/XAdkWebProvider.stories.d.ts +2 -2
  44. package/dist/esm/components/XAdkWebProvider/XAdkWebProvider.stories.js +45 -40
  45. package/dist/esm/components/XAdkWebProvider/XAdkWebProvider.stories.js.map +1 -1
  46. package/dist/esm/components/XAiThoughtChain/XAiThoughtChain.stories.d.ts +6 -0
  47. package/dist/esm/components/XAiThoughtChain/XAiThoughtChain.stories.js +159 -0
  48. package/dist/esm/components/XAiThoughtChain/XAiThoughtChain.stories.js.map +1 -0
  49. package/dist/esm/components/XAiThoughtChain/index.d.ts +4 -0
  50. package/dist/esm/components/XAiThoughtChain/index.js +180 -0
  51. package/dist/esm/components/XAiThoughtChain/index.js.map +1 -0
  52. package/dist/esm/components/XAiThoughtChain/styles.d.ts +60 -0
  53. package/dist/esm/components/XAiThoughtChain/styles.js +40 -0
  54. package/dist/esm/components/XAiThoughtChain/styles.js.map +1 -0
  55. package/dist/esm/hooks/useADKChat.d.ts +2 -2
  56. package/dist/esm/hooks/useADKChat.js +59 -57
  57. package/dist/esm/hooks/useADKChat.js.map +1 -1
  58. package/dist/esm/types/XAiThoughtChain.d.ts +25 -0
  59. package/dist/esm/types/XAiThoughtChain.js +2 -0
  60. package/dist/esm/types/XAiThoughtChain.js.map +1 -0
  61. package/dist/esm/types/index.d.ts +9 -8
  62. package/dist/esm/types/index.js +1 -0
  63. package/dist/esm/types/index.js.map +1 -1
  64. package/dist/esm/utils/index.d.ts +1 -0
  65. package/dist/esm/utils/index.js +4 -0
  66. package/dist/esm/utils/index.js.map +1 -1
  67. package/dist/umd/chat-sdk.min.js +1 -1
  68. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React from "react";
2
2
  import type { IMessage, FunctionCall } from "../../../../types";
3
3
  export interface FunctionCallRenderProps {
4
4
  msg: IMessage;
@@ -37,7 +37,11 @@ var import_icons = require("@ant-design/icons");
37
37
  var import_styles = require("./styles");
38
38
  var import_XAiJsonView = __toESM(require("../../../XAiJsonView"));
39
39
  var import_jsx_runtime = require("react/jsx-runtime");
40
- var FunctionCallRender = ({ msg, showDetail, onConfirm }) => {
40
+ var FunctionCallRender = ({
41
+ msg,
42
+ showDetail,
43
+ onConfirm
44
+ }) => {
41
45
  var _a, _b, _c, _d, _e;
42
46
  const styles = (0, import_styles.useStyles)();
43
47
  const fnCall = msg.functionCall;
@@ -48,17 +52,49 @@ var FunctionCallRender = ({ msg, showDetail, onConfirm }) => {
48
52
  if (msg.role === "bot")
49
53
  return null;
50
54
  const confirmed = (_a = fnRes.response) == null ? void 0 : _a.confirmed;
51
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.wrapper, children: confirmed ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Alert, { message: "已确认", type: "success", showIcon: true, className: styles.alert }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Alert, { message: "已取消", type: "error", showIcon: true, className: styles.alert }) }, msg.id);
55
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.wrapper, children: confirmed ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
56
+ import_antd.Alert,
57
+ {
58
+ message: "已确认",
59
+ type: "success",
60
+ showIcon: true,
61
+ className: styles.alert
62
+ }
63
+ ) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
64
+ import_antd.Alert,
65
+ {
66
+ message: "已取消",
67
+ type: "error",
68
+ showIcon: true,
69
+ className: styles.alert
70
+ }
71
+ ) }, msg.id);
52
72
  }
53
73
  const originalFn = (_c = (_b = msg == null ? void 0 : msg.functionCall) == null ? void 0 : _b.args) == null ? void 0 : _c.originalFunctionCall;
54
74
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.wrapper, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.confirm, children: [
55
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "mb-4", children: [
75
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.confirmText, children: [
56
76
  "请确认是否执行工具:",
57
77
  originalFn == null ? void 0 : originalFn.name
58
78
  ] }),
59
79
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_antd.Flex, { justify: "end", gap: 8, children: [
60
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Button, { type: "default", onClick: () => onConfirm == null ? void 0 : onConfirm(fnCall, false), children: "取消" }),
61
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Button, { type: "primary", onClick: () => onConfirm == null ? void 0 : onConfirm(fnCall, true), children: "确认" })
80
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
81
+ import_antd.Button,
82
+ {
83
+ type: "default",
84
+ size: "small",
85
+ onClick: () => onConfirm == null ? void 0 : onConfirm(fnCall, false),
86
+ children: "取消"
87
+ }
88
+ ),
89
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
90
+ import_antd.Button,
91
+ {
92
+ type: "primary",
93
+ size: "small",
94
+ onClick: () => onConfirm == null ? void 0 : onConfirm(fnCall, true),
95
+ children: "确认"
96
+ }
97
+ )
62
98
  ] })
63
99
  ] }) }, msg.id);
64
100
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/components/XAdkChatbot/components/FunctionCallRender/index.tsx"],
4
- "sourcesContent": ["import React from 'react';\nimport { Alert, Button, Flex, Form, Popover, Tooltip, Typography } from 'antd';\nimport { CopyOutlined, ToolOutlined, CheckCircleTwoTone, LoadingOutlined, UserSwitchOutlined, InfoCircleOutlined } from '@ant-design/icons';\nimport type { IMessage, FunctionCall } from '@/types';\nimport { useStyles } from './styles';\nimport JsonView from '@/components/XAiJsonView';\n\nexport interface FunctionCallRenderProps {\n msg: IMessage;\n showDetail?: boolean;\n onConfirm?: (fnCall: FunctionCall, confirmed: boolean) => void;\n}\n\nconst FunctionCallRender: React.FC<FunctionCallRenderProps> = ({ msg, showDetail, onConfirm }) => {\n const styles = useStyles();\n const fnCall = msg.functionCall as FunctionCall;\n const fnRes = msg.functionResponse;\n const name = fnCall?.name || fnRes?.name;\n if (name === 'adk_request_confirmation') {\n if (fnRes) {\n if (msg.role === 'bot') return null;\n const confirmed = fnRes.response?.confirmed;\n return (\n <div key={msg.id} className={styles.wrapper}>\n {confirmed\n ? <Alert message=\"已确认\" type=\"success\" showIcon className={styles.alert} />\n : <Alert message=\"已取消\" type=\"error\" showIcon className={styles.alert} />}\n </div>\n );\n }\n const originalFn = msg?.functionCall?.args?.originalFunctionCall;\n return (\n <div key={msg.id} className={styles.wrapper}>\n <div className={styles.confirm}>\n <div className=\"mb-4\">请确认是否执行工具:{originalFn?.name}</div>\n <Flex justify=\"end\" gap={8}>\n <Button type=\"default\" onClick={() => onConfirm?.(fnCall, false)}>取消</Button>\n <Button type=\"primary\" onClick={() => onConfirm?.(fnCall, true)}>\n 确认\n </Button>\n </Flex>\n </div>\n </div>\n );\n }\n if (name === 'transferToAgent') {\n const agentName = fnCall?.args?.agentName;\n return (\n <div key={msg.id} className={styles.wrapper}>\n <div className={styles.fnCall}>\n <UserSwitchOutlined style={{ color: '#888' }} />\n <Typography.Text\n ellipsis={{ tooltip: agentName }}\n style={{ maxWidth: 300, lineHeight: '16px' }}\n >\n 任务转交:{agentName}\n </Typography.Text>\n {msg.functionResponse\n ? <CheckCircleTwoTone twoToneColor=\"#52c41a\" />\n : <LoadingOutlined />}\n </div>\n </div>\n );\n }\n const renderItem = (obj: any, text: string) => {\n const str = JSON.stringify(obj, null, 2);\n return (\n <Form.Item\n label={(\n <Flex align=\"center\">\n <span className=\"mr-2\">{text}</span>\n <Typography.Text\n copyable={{\n text: str,\n icon: <CopyOutlined />,\n }}\n />\n </Flex>\n )}\n style={{ marginBottom: 12 }}\n >\n <JsonView value={str} />\n </Form.Item>\n );\n };\n const renderResponse = () => {\n const res = msg.functionResponse;\n if (res) {\n if (res.response?.error) {\n return (\n <Tooltip title={res.response.error}>\n <InfoCircleOutlined style={{ color: '#faad14' }} />\n </Tooltip>\n );\n }\n return <CheckCircleTwoTone twoToneColor=\"#52c41a\" />;\n }\n return <LoadingOutlined />;\n };\n return (\n <div key={msg.id} className={styles.wrapper}>\n {showDetail ? (\n <Popover\n placement=\"left\"\n content={(\n <Form style={{ width: 400 }} layout=\"vertical\">\n {renderItem(fnCall?.args, '工具参数')}\n {renderItem(msg.functionResponse?.response, '工具响应')}\n </Form>\n )}\n >\n <div className={styles.fnCall}>\n <ToolOutlined style={{ color: '#888' }} />\n <Typography.Text\n ellipsis={{ tooltip: name }}\n style={{ maxWidth: 300, lineHeight: '16px' }}\n >\n 调用工具:{name}\n </Typography.Text>\n {renderResponse()}\n </div>\n </Popover>\n ) : (\n <div className={styles.fnCall}>\n <ToolOutlined style={{ color: '#888' }} />\n <Typography.Text\n ellipsis={{ tooltip: name }}\n style={{ maxWidth: 300, lineHeight: '16px' }}\n >\n 调用工具:{name}\n </Typography.Text>\n {renderResponse()}\n </div>\n )}\n </div>\n );\n};\n\nexport default FunctionCallRender;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import React from \"react\";\nimport { Alert, Button, Flex, Form, Popover, Tooltip, Typography } from \"antd\";\nimport {\n CopyOutlined,\n ToolOutlined,\n CheckCircleTwoTone,\n LoadingOutlined,\n UserSwitchOutlined,\n InfoCircleOutlined,\n} from \"@ant-design/icons\";\nimport type { IMessage, FunctionCall } from \"@/types\";\nimport { useStyles } from \"./styles\";\nimport JsonView from \"@/components/XAiJsonView\";\n\nexport interface FunctionCallRenderProps {\n msg: IMessage;\n showDetail?: boolean;\n onConfirm?: (fnCall: FunctionCall, confirmed: boolean) => void;\n}\n\nconst FunctionCallRender: React.FC<FunctionCallRenderProps> = ({\n msg,\n showDetail,\n onConfirm,\n}) => {\n const styles = useStyles();\n const fnCall = msg.functionCall as FunctionCall;\n const fnRes = msg.functionResponse;\n const name = fnCall?.name || fnRes?.name;\n if (name === \"adk_request_confirmation\") {\n if (fnRes) {\n if (msg.role === \"bot\") return null;\n const confirmed = fnRes.response?.confirmed;\n return (\n <div key={msg.id} className={styles.wrapper}>\n {confirmed ? (\n <Alert\n message=\"已确认\"\n type=\"success\"\n showIcon\n className={styles.alert}\n />\n ) : (\n <Alert\n message=\"已取消\"\n type=\"error\"\n showIcon\n className={styles.alert}\n />\n )}\n </div>\n );\n }\n const originalFn = msg?.functionCall?.args?.originalFunctionCall;\n return (\n <div key={msg.id} className={styles.wrapper}>\n <div className={styles.confirm}>\n <div className={styles.confirmText}>\n 请确认是否执行工具:{originalFn?.name}\n </div>\n <Flex justify=\"end\" gap={8}>\n <Button\n type=\"default\"\n size=\"small\"\n onClick={() => onConfirm?.(fnCall, false)}\n >\n 取消\n </Button>\n <Button\n type=\"primary\"\n size=\"small\"\n onClick={() => onConfirm?.(fnCall, true)}\n >\n 确认\n </Button>\n </Flex>\n </div>\n </div>\n );\n }\n if (name === \"transferToAgent\") {\n const agentName = fnCall?.args?.agentName;\n return (\n <div key={msg.id} className={styles.wrapper}>\n <div className={styles.fnCall}>\n <UserSwitchOutlined style={{ color: \"#888\" }} />\n <Typography.Text\n ellipsis={{ tooltip: agentName }}\n style={{ maxWidth: 300, lineHeight: \"16px\" }}\n >\n 任务转交:{agentName}\n </Typography.Text>\n {msg.functionResponse ? (\n <CheckCircleTwoTone twoToneColor=\"#52c41a\" />\n ) : (\n <LoadingOutlined />\n )}\n </div>\n </div>\n );\n }\n const renderItem = (obj: any, text: string) => {\n const str = JSON.stringify(obj, null, 2);\n return (\n <Form.Item\n label={\n <Flex align=\"center\">\n <span className=\"mr-2\">{text}</span>\n <Typography.Text\n copyable={{\n text: str,\n icon: <CopyOutlined />,\n }}\n />\n </Flex>\n }\n style={{ marginBottom: 12 }}\n >\n <JsonView value={str} />\n </Form.Item>\n );\n };\n const renderResponse = () => {\n const res = msg.functionResponse;\n if (res) {\n if (res.response?.error) {\n return (\n <Tooltip title={res.response.error}>\n <InfoCircleOutlined style={{ color: \"#faad14\" }} />\n </Tooltip>\n );\n }\n return <CheckCircleTwoTone twoToneColor=\"#52c41a\" />;\n }\n return <LoadingOutlined />;\n };\n return (\n <div key={msg.id} className={styles.wrapper}>\n {showDetail ? (\n <Popover\n placement=\"left\"\n content={\n <Form style={{ width: 400 }} layout=\"vertical\">\n {renderItem(fnCall?.args, \"工具参数\")}\n {renderItem(msg.functionResponse?.response, \"工具响应\")}\n </Form>\n }\n >\n <div className={styles.fnCall}>\n <ToolOutlined style={{ color: \"#888\" }} />\n <Typography.Text\n ellipsis={{ tooltip: name }}\n style={{ maxWidth: 300, lineHeight: \"16px\" }}\n >\n 调用工具:{name}\n </Typography.Text>\n {renderResponse()}\n </div>\n </Popover>\n ) : (\n <div className={styles.fnCall}>\n <ToolOutlined style={{ color: \"#888\" }} />\n <Typography.Text\n ellipsis={{ tooltip: name }}\n style={{ maxWidth: 300, lineHeight: \"16px\" }}\n >\n 调用工具:{name}\n </Typography.Text>\n {renderResponse()}\n </div>\n )}\n </div>\n );\n};\n\nexport default FunctionCallRender;\n"],
5
+ "mappings": "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",
6
6
  "names": ["JsonView", "_a"]
7
7
  }
@@ -2,6 +2,7 @@ export declare const useStyles: () => {
2
2
  wrapper: string;
3
3
  fnCall: string;
4
4
  confirm: string;
5
+ confirmText: string;
5
6
  alert: string;
6
7
  } & {
7
8
  w: (width: string | number) => string;
@@ -28,7 +28,7 @@ var import_common = require("../../../../styles/common");
28
28
  var useStyles = (0, import_common.withBasicStyles)(() => ({
29
29
  wrapper: import_css.css`
30
30
  display: flex;
31
- justify-content: flex-start;
31
+ justify-content: flex-end;
32
32
  margin-bottom: 12px;
33
33
  `,
34
34
  fnCall: import_css.css`
@@ -36,15 +36,26 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
36
36
  align-items: center;
37
37
  gap: 8px;
38
38
  padding: 7px 12px;
39
- border-radius: 24px;
39
+ border-radius: 8px;
40
40
  line-height: 16px;
41
41
  border: 1px solid #e7e7e7;
42
42
  cursor: pointer;
43
+
44
+ &:hover {
45
+ box-shadow: 0 2px 6px rgba(22, 119, 255, 0.15);
46
+ }
43
47
  `,
44
48
  confirm: import_css.css`
45
49
  padding: 12px;
46
50
  border-radius: 12px;
47
- border: 1px solid #e7e7e7;
51
+ background: #fffbe6;
52
+ color: #d48806;
53
+ border: 1px solid #ffe58f;
54
+ max-width: 400px;
55
+ flex: 1;
56
+ `,
57
+ confirmText: import_css.css`
58
+ margin-bottom: 8px;
48
59
  `,
49
60
  alert: import_css.css`
50
61
  line-height: 1;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/components/XAdkChatbot/components/FunctionCallRender/styles.tsx"],
4
- "sourcesContent": ["import { css } from '@emotion/css';\nimport { withBasicStyles } from '@/styles/common';\n\nexport const useStyles = withBasicStyles(() => ({\n wrapper: css`\n display: flex;\n justify-content: flex-start;\n margin-bottom: 12px;\n `,\n\n fnCall: css`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 7px 12px;\n border-radius: 24px;\n line-height: 16px;\n border: 1px solid #e7e7e7;\n cursor: pointer;\n `,\n\n confirm: css`\n padding: 12px;\n border-radius: 12px;\n border: 1px solid #e7e7e7;\n `,\n\n alert: css`\n line-height: 1;\n border-radius: 24px;\n `,\n}));\n\nexport default useStyles;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAoB;AACpB,oBAAgC;AAEzB,IAAM,gBAAY,+BAAgB,OAAO;AAAA,EAC9C,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAMT,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWR,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAMT,OAAO;AAAA;AAAA;AAAA;AAIT,EAAE;AAEF,IAAO,iBAAQ;",
4
+ "sourcesContent": ["import { css } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\n\nexport const useStyles = withBasicStyles(() => ({\n wrapper: css`\n display: flex;\n justify-content: flex-end;\n margin-bottom: 12px;\n `,\n\n fnCall: css`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 7px 12px;\n border-radius: 8px;\n line-height: 16px;\n border: 1px solid #e7e7e7;\n cursor: pointer;\n\n &:hover {\n box-shadow: 0 2px 6px rgba(22, 119, 255, 0.15);\n }\n `,\n\n confirm: css`\n padding: 12px;\n border-radius: 12px;\n background: #fffbe6;\n color: #d48806;\n border: 1px solid #ffe58f;\n max-width: 400px;\n flex: 1;\n `,\n\n confirmText: css`\n margin-bottom: 8px;\n `,\n\n alert: css`\n line-height: 1;\n border-radius: 24px;\n `,\n}));\n\nexport default useStyles;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAoB;AACpB,oBAAgC;AAEzB,IAAM,gBAAY,+BAAgB,OAAO;AAAA,EAC9C,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAMT,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeR,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUT,aAAa;AAAA;AAAA;AAAA,EAIb,OAAO;AAAA;AAAA;AAAA;AAIT,EAAE;AAEF,IAAO,iBAAQ;",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React from "react";
2
2
  import type { XAdkChatbotProps } from "../../types";
3
3
  declare const XAdkChatbot: React.FC<XAdkChatbotProps>;
4
4
  export default XAdkChatbot;
@@ -124,7 +124,7 @@ var XAdkChatbot = ({
124
124
  }, [messages]);
125
125
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.wrapper, children: [
126
126
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.list, ref: listRef, children: [
127
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.prologue, children: prologue }),
127
+ prologue && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.prologue, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_MarkdownRender.default, { text: prologue }) }),
128
128
  messages.map((msg, i) => {
129
129
  if (msg.role === "user") {
130
130
  if (msg.text) {
@@ -141,29 +141,46 @@ var XAdkChatbot = ({
141
141
  if (msg.text) {
142
142
  if (msg.thought) {
143
143
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.botMsg, children: [
144
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
145
- import_ThinkRender.default,
146
- {
147
- msg,
148
- loading: isLoading
149
- }
150
- ),
151
- !isLoading && (footer == null ? void 0 : footer({ message: msg, isLastMsg: isLast, isLastBotMsg }))
144
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ThinkRender.default, { msg, loading: isLoading }),
145
+ !isLoading && (footer == null ? void 0 : footer({
146
+ message: msg,
147
+ isLastMsg: isLast,
148
+ isLastBotMsg
149
+ }))
152
150
  ] }, `${msg.id}-${i}`);
153
151
  }
154
152
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.botMsg, children: [
155
153
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_MarkdownRender.default, { text: msg.text }),
156
- !isLoading && (footer == null ? void 0 : footer({ message: msg, isLastMsg: isLast, isLastBotMsg }))
154
+ !isLoading && (footer == null ? void 0 : footer({
155
+ message: msg,
156
+ isLastMsg: isLast,
157
+ isLastBotMsg
158
+ }))
157
159
  ] }, `${msg.id}-${i}`);
158
160
  }
159
161
  const fnCall = msg.functionCall;
160
162
  if (fnCall) {
161
163
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.botMsg, children: [
162
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_FunctionCallRender.default, { msg, showDetail: showFnCallDetail, onConfirm }),
163
- !isLoading && (footer == null ? void 0 : footer({ message: msg, isLastMsg: isLast, isLastBotMsg }))
164
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
165
+ import_FunctionCallRender.default,
166
+ {
167
+ msg,
168
+ showDetail: showFnCallDetail,
169
+ onConfirm
170
+ }
171
+ ),
172
+ !isLoading && (footer == null ? void 0 : footer({
173
+ message: msg,
174
+ isLastMsg: isLast,
175
+ isLastBotMsg
176
+ }))
164
177
  ] }, `${msg.id}-${i}`);
165
178
  }
166
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.botMsg, children: !isLoading && (footer == null ? void 0 : footer({ message: msg, isLastMsg: isLast, isLastBotMsg })) }, `${msg.id}-${i}`);
179
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.botMsg, children: !isLoading && (footer == null ? void 0 : footer({
180
+ message: msg,
181
+ isLastMsg: isLast,
182
+ isLastBotMsg
183
+ })) }, `${msg.id}-${i}`);
167
184
  }),
168
185
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { children: suggestions == null ? void 0 : suggestions.map((item) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.suggestion, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.suggestContent, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
169
186
  import_antd.Button,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/XAdkChatbot/index.tsx"],
4
- "sourcesContent": ["import React, { useMemo, useCallback, useEffect, useRef } from 'react';\nimport { Button } from 'antd';\nimport { SwapRightOutlined } from '@ant-design/icons';\nimport { useStyles } from './styles';\nimport MarkdownRender from './components/MarkdownRender';\nimport FunctionCallRender from './components/FunctionCallRender';\nimport ThinkRender from './components/ThinkRender';\nimport XAdkSender from '../XAdkSender';\nimport type { IMessage, XAdkChatbotProps, SendContent } from '@/types';\n\nconst scrollThreshold = 10; // 滚动阈值\n\n\nconst XAdkChatbot: React.FC<XAdkChatbotProps> = ({ \n allowUpload = false,\n uploadRequest = () => {},\n loading = false,\n prologue,\n suggestions,\n messages,\n initialized = true,\n footer,\n showFnCallDetail,\n clearBtnShow = true,\n onConfirm,\n onSubmit,\n onSuggest,\n onStop,\n onClear,\n }) => {\n const styles = useStyles();\n const listRef = useRef<HTMLDivElement>(null);\n const lastScrollTopRef = useRef(0);\n const userHasScrolledRef = useRef(false);\n const messagesEndRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!loading) return;\n if (userHasScrolledRef.current) return;\n messagesEndRef.current?.scrollIntoView({\n behavior: 'smooth',\n });\n }, [loading, messages]);\n\n // 处理滚动事件 - 检测用户是否手动滚动\n const handleScroll = useCallback(() => {\n const el = listRef.current;\n if (!el) return;\n const currentTop = el.scrollTop;\n // 如果向上滚动,说明是手动干预\n if (currentTop < lastScrollTopRef.current) {\n userHasScrolledRef.current = true;\n }\n // 如果向下并且已经到了底部,则恢复自动\n const isAtBottom = \n Math.abs(el.scrollHeight - currentTop - el.clientHeight) <= scrollThreshold;\n\n if (isAtBottom) {\n userHasScrolledRef.current = false;\n }\n\n // 更新上次位置\n lastScrollTopRef.current = currentTop;\n }, []);\n\n // 监听滚动事件\n useEffect(() => {\n const listElement = listRef.current\n if (!listElement) return;\n\n listElement.addEventListener('scroll', handleScroll);\n return () => {\n listElement.removeEventListener('scroll', handleScroll);\n };\n }, []);\n\n // 发送消息\n const handleSubmit = ({ text, files }: SendContent) => {\n if (loading) return;\n if (!text?.trim()) return;\n onSubmit?.({ text, files });\n // 滚动\n queueMicrotask(() => {\n messagesEndRef.current?.scrollIntoView({ behavior: 'instant' });\n });\n // 重置用户滚动状态\n setTimeout(() => {\n userHasScrolledRef.current = false;\n }, 0);\n };\n\n const lastIndex = messages.length - 1;\n\n const lastMessageMap = useMemo(() => {\n const map = new Map<string, string>();\n for (const msg of messages) {\n if (msg.role === 'bot' && msg.invocationId) {\n map.set(msg.invocationId, msg.id);\n }\n }\n return map;\n }, [messages]);\n\n return (\n <div className={styles.wrapper}>\n <div className={styles.list} ref={listRef}>\n <div className={styles.prologue}>\n {prologue}\n </div>\n {messages.map((msg, i) => {\n if (msg.role === 'user') {\n if (msg.text) {\n return (\n <div key={`${msg.id}-${i}`} className={styles.userMsg}>\n <div className={styles.card}>{msg.text}</div>\n </div>\n );\n }\n if (msg.functionResponse) {\n return (\n <div key={`${msg.id}-${i}`} className={styles.userMsg}>\n <FunctionCallRender msg={msg} showDetail={showFnCallDetail} />\n </div>\n );\n }\n return null;\n }\n const isLast = i === lastIndex;\n const isLoading = isLast && loading;\n const isLastBotMsg = lastMessageMap.get(msg?.invocationId || '') === msg.id;\n \n if (msg.text) {\n if (msg.thought) {\n return (\n <div key={`${msg.id}-${i}`} className={styles.botMsg}>\n <ThinkRender\n msg={msg}\n loading={isLoading}\n />\n {!isLoading && footer?.({ message: msg as IMessage, isLastMsg: isLast, isLastBotMsg })}\n </div>\n );\n }\n return (\n <div key={`${msg.id}-${i}`} className={styles.botMsg}>\n <MarkdownRender text={msg.text} />\n {!isLoading && footer?.({ message: msg as IMessage, isLastMsg: isLast, isLastBotMsg })}\n </div>\n );\n }\n const fnCall = msg.functionCall;\n if (fnCall) {\n return (\n <div key={`${msg.id}-${i}`} className={styles.botMsg}>\n <FunctionCallRender msg={msg} showDetail={showFnCallDetail} onConfirm={onConfirm}/>\n {!isLoading && footer?.({ message: msg as IMessage, isLastMsg: isLast, isLastBotMsg })}\n </div>\n );\n }\n return (\n <div key={`${msg.id}-${i}`} className={styles.botMsg}>\n {!isLoading && footer?.({ message: msg as IMessage, isLastMsg: isLast, isLastBotMsg })}\n </div>\n );\n })}\n <div>\n {suggestions?.map((item) => (\n <div key={item} className={styles.suggestion}>\n <div className={styles.suggestContent}>\n <Button\n type=\"text\"\n icon={<SwapRightOutlined />}\n iconPosition='end'\n onClick={() => {\n if (!item) return;\n onSuggest?.(item);\n }}\n style={{ \n whiteSpace: 'normal',\n height: 'auto',\n wordWrap: 'break-word',\n textAlign: 'left',\n padding: '4px 15px',\n lineHeight: '1.5'\n }}\n >\n {item}\n </Button>\n </div>\n </div>\n ))}\n </div>\n <div ref={messagesEndRef} />\n </div>\n <XAdkSender\n allowUpload={allowUpload}\n uploadRequest={uploadRequest}\n loading={loading}\n clearBtnShow={clearBtnShow}\n onSubmit={handleSubmit}\n onClear={onClear}\n onStop={onStop}\n />\n </div>\n );\n};\n\nexport default XAdkChatbot;"],
5
- "mappings": "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",
6
- "names": ["FunctionCallRender", "ThinkRender", "MarkdownRender", "XAdkSender"]
4
+ "sourcesContent": ["import React, { useMemo, useCallback, useEffect, useRef } from \"react\";\nimport { Button } from \"antd\";\nimport { SwapRightOutlined } from \"@ant-design/icons\";\nimport { useStyles } from \"./styles\";\nimport MarkdownRender from \"./components/MarkdownRender\";\nimport FunctionCallRender from \"./components/FunctionCallRender\";\nimport ThinkRender from \"./components/ThinkRender\";\nimport XAdkSender from \"../XAdkSender\";\nimport type { IMessage, XAdkChatbotProps, SendContent } from \"@/types\";\n\nconst scrollThreshold = 10; // 滚动阈值\n\nconst XAdkChatbot: React.FC<XAdkChatbotProps> = ({\n allowUpload = false,\n uploadRequest = () => {},\n loading = false,\n prologue,\n suggestions,\n messages,\n initialized = true,\n footer,\n showFnCallDetail,\n clearBtnShow = true,\n onConfirm,\n onSubmit,\n onSuggest,\n onStop,\n onClear,\n}) => {\n const styles = useStyles();\n const listRef = useRef<HTMLDivElement>(null);\n const lastScrollTopRef = useRef(0);\n const userHasScrolledRef = useRef(false);\n const messagesEndRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!loading) return;\n if (userHasScrolledRef.current) return;\n messagesEndRef.current?.scrollIntoView({\n behavior: \"smooth\",\n });\n }, [loading, messages]);\n\n // 处理滚动事件 - 检测用户是否手动滚动\n const handleScroll = useCallback(() => {\n const el = listRef.current;\n if (!el) return;\n const currentTop = el.scrollTop;\n // 如果向上滚动,说明是手动干预\n if (currentTop < lastScrollTopRef.current) {\n userHasScrolledRef.current = true;\n }\n // 如果向下并且已经到了底部,则恢复自动\n const isAtBottom =\n Math.abs(el.scrollHeight - currentTop - el.clientHeight) <=\n scrollThreshold;\n\n if (isAtBottom) {\n userHasScrolledRef.current = false;\n }\n\n // 更新上次位置\n lastScrollTopRef.current = currentTop;\n }, []);\n\n // 监听滚动事件\n useEffect(() => {\n const listElement = listRef.current;\n if (!listElement) return;\n\n listElement.addEventListener(\"scroll\", handleScroll);\n return () => {\n listElement.removeEventListener(\"scroll\", handleScroll);\n };\n }, []);\n\n // 发送消息\n const handleSubmit = ({ text, files }: SendContent) => {\n if (loading) return;\n if (!text?.trim()) return;\n onSubmit?.({ text, files });\n // 滚动\n queueMicrotask(() => {\n messagesEndRef.current?.scrollIntoView({ behavior: \"instant\" });\n });\n // 重置用户滚动状态\n setTimeout(() => {\n userHasScrolledRef.current = false;\n }, 0);\n };\n\n const lastIndex = messages.length - 1;\n\n const lastMessageMap = useMemo(() => {\n const map = new Map<string, string>();\n for (const msg of messages) {\n if (msg.role === \"bot\" && msg.invocationId) {\n map.set(msg.invocationId, msg.id);\n }\n }\n return map;\n }, [messages]);\n\n return (\n <div className={styles.wrapper}>\n <div className={styles.list} ref={listRef}>\n {prologue && (\n <div className={styles.prologue}>\n <MarkdownRender text={prologue} />\n </div>\n )}\n {messages.map((msg, i) => {\n if (msg.role === \"user\") {\n if (msg.text) {\n return (\n <div key={`${msg.id}-${i}`} className={styles.userMsg}>\n <div className={styles.card}>{msg.text}</div>\n </div>\n );\n }\n if (msg.functionResponse) {\n return (\n <div key={`${msg.id}-${i}`} className={styles.userMsg}>\n <FunctionCallRender msg={msg} showDetail={showFnCallDetail} />\n </div>\n );\n }\n return null;\n }\n const isLast = i === lastIndex;\n const isLoading = isLast && loading;\n const isLastBotMsg =\n lastMessageMap.get(msg?.invocationId || \"\") === msg.id;\n\n if (msg.text) {\n if (msg.thought) {\n return (\n <div key={`${msg.id}-${i}`} className={styles.botMsg}>\n <ThinkRender msg={msg} loading={isLoading} />\n {!isLoading &&\n footer?.({\n message: msg as IMessage,\n isLastMsg: isLast,\n isLastBotMsg,\n })}\n </div>\n );\n }\n return (\n <div key={`${msg.id}-${i}`} className={styles.botMsg}>\n <MarkdownRender text={msg.text} />\n {!isLoading &&\n footer?.({\n message: msg as IMessage,\n isLastMsg: isLast,\n isLastBotMsg,\n })}\n </div>\n );\n }\n const fnCall = msg.functionCall;\n if (fnCall) {\n return (\n <div key={`${msg.id}-${i}`} className={styles.botMsg}>\n <FunctionCallRender\n msg={msg}\n showDetail={showFnCallDetail}\n onConfirm={onConfirm}\n />\n {!isLoading &&\n footer?.({\n message: msg as IMessage,\n isLastMsg: isLast,\n isLastBotMsg,\n })}\n </div>\n );\n }\n return (\n <div key={`${msg.id}-${i}`} className={styles.botMsg}>\n {!isLoading &&\n footer?.({\n message: msg as IMessage,\n isLastMsg: isLast,\n isLastBotMsg,\n })}\n </div>\n );\n })}\n <div>\n {suggestions?.map((item) => (\n <div key={item} className={styles.suggestion}>\n <div className={styles.suggestContent}>\n <Button\n type=\"text\"\n icon={<SwapRightOutlined />}\n iconPosition=\"end\"\n onClick={() => {\n if (!item) return;\n onSuggest?.(item);\n }}\n style={{\n whiteSpace: \"normal\",\n height: \"auto\",\n wordWrap: \"break-word\",\n textAlign: \"left\",\n padding: \"4px 15px\",\n lineHeight: \"1.5\",\n }}\n >\n {item}\n </Button>\n </div>\n </div>\n ))}\n </div>\n <div ref={messagesEndRef} />\n </div>\n <XAdkSender\n allowUpload={allowUpload}\n uploadRequest={uploadRequest}\n loading={loading}\n clearBtnShow={clearBtnShow}\n onSubmit={handleSubmit}\n onClear={onClear}\n onStop={onStop}\n />\n </div>\n );\n};\n\nexport default XAdkChatbot;\n"],
5
+ "mappings": "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",
6
+ "names": ["MarkdownRender", "FunctionCallRender", "ThinkRender", "XAdkSender"]
7
7
  }
@@ -1,5 +1,5 @@
1
- import type { Meta, StoryObj } from '@storybook/react-vite';
2
- import XAdkWebProvider from './index';
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import XAdkWebProvider from "./index";
3
3
  declare const meta: Meta<typeof XAdkWebProvider>;
4
4
  export default meta;
5
5
  type Story = StoryObj<typeof meta>;
@@ -82,7 +82,19 @@ var 单聊天窗口实例 = {
82
82
  }
83
83
  };
84
84
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: { display: "flex" }, children: [
85
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: { display: "flex", flexDirection: "column", gap: "12px", marginRight: "24px", justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Button, { type: "primary", onClick: handleSendMessage, children: "发送消息" }) }),
85
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
86
+ "div",
87
+ {
88
+ style: {
89
+ display: "flex",
90
+ flexDirection: "column",
91
+ gap: "12px",
92
+ marginRight: "24px",
93
+ justifyContent: "center"
94
+ },
95
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Button, { type: "primary", onClick: handleSendMessage, children: "发送消息" })
96
+ }
97
+ ),
86
98
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: { maxWidth: "350px", height: "600px" }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
87
99
  import_index.default,
88
100
  {
@@ -106,8 +118,8 @@ var 携带历史记录实例 = {
106
118
  const providerRef = import_react.default.useRef(null);
107
119
  const handleSendMessage = () => {
108
120
  var _a;
109
- if ((_a = providerRef.current) == null ? void 0 : _a.chat) {
110
- providerRef.current.chat({
121
+ if ((_a = providerRef.current) == null ? void 0 : _a.startChat) {
122
+ providerRef.current.startChat({
111
123
  text: "你好,AI!",
112
124
  // 上传文案
113
125
  files: []
@@ -124,6 +136,10 @@ var 携带历史记录实例 = {
124
136
  console.log(providerRef.current.getMessages());
125
137
  } else if (code === "APP_MESSAGES_INIT_SUCCESS") {
126
138
  console.log(code, data);
139
+ } else if (code === "APP_CONFIG_INIT_SUCCESS") {
140
+ setTimeout(() => {
141
+ handleSendMessage();
142
+ }, 2e3);
127
143
  }
128
144
  };
129
145
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: { display: "flex" }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: { height: "600px", width: "100vw" }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
@@ -139,15 +155,16 @@ var 携带历史记录实例 = {
139
155
  ) }) });
140
156
  },
141
157
  args: {
142
- url: "https://m-poc.zaxline.com",
143
- token: "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiU0tUYkp6MDE5bWFVdnFqcC9OUGJEQT09Iiwic2NvcGUiOlsiMGhic2RXYkZVYktZRXkxMEsxNDM3WFhtIl0sImV4cCI6MTc2OTE2MzM1NCwianRpIjoiSlFGN21SSEwyLWFhaVF3Nlh0Q19mcEw3eTEwIiwiY2xpZW50X2lkIjoiMGhic2RXYkZVYktZRXkxMEsxNDM3WFhtIn0.NxxxWuSjnDt6Md79wOJX2AznuZ0sE4vZ8p9Gdva-ncDt-Qz6ghUUlKq47HIgAdrnDxIABU7H0RsHXv43rzFcBTK5GMr-SprF4TqhbMbhhEdTwGPgN76kaJVh4SagfbczWuIVBQl4PIzVZ2yMrYz0M2itYYoaAfvnbGBfRIZ6MJIhM-BCAAjrv86I3qDHnYQedjKmdiS9CXeoOt_lqQWk-GU-wl2FhkTsmo4Xt9PD055PPdEmsGCj5I__lIe4W2jqtGPmq82SNfLuzd0TUU7kmf6maUgLqVIRX7EUv51tW4P9BjnNP6fkG7Gkvte46pcO93OAXSlxd7QZ7jca5Gs62w",
158
+ url: "https://m-poc-dev.zaxline.com",
159
+ token: "eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJhdWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJuYmYiOjE3NzI3MDA1MzcsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3MjcwNzczNywiaWF0IjoxNzcyNzAwNTM3LCJqdGkiOiJlZWM3NzA2Mi01YmNjLTRlOTgtYTExZC1hOThjN2Q3NmZlZjIiLCJjbGllbnRfaWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08ifQ.eDF_7XsgyAehFXTfB-6FcJglLDacEQz-UGLYGuI3lv-QQnSLekK5DvHBBA9T56OZ6DlQLMC3vhtvJV10lQwigWLE-b4fYTM205mhrtcBQFTUu0EBRTm0g_5sItw-0qaR9E6729H4s8Ty8zyst_nwGhxHWGMjg80cZM47UXhzEpL18wr2JDEWZmq7ZrvxFxqGiR2kjHMB1MOqIEIqGdwBmIDWkZus1qOFJzKN2tSd5Rd4hcLW3pdXmcEJZnVQfAwjqUTu5Peq7mSS0jXh_CIie8tJMOBX7-Fy3N10GSuYZSPCm3Aw0SPnRKgqzh2l4_401yw0lbX36QHBrTOxlXu_Zw",
144
160
  config: {
145
- appNo: "0hbsdWbFUbKYEy10K1437XXm",
161
+ appNo: "3jt2YbDjewVn2PHRKaDfJEgO",
162
+ chatProps: {
163
+ clearBtnShow: false
164
+ },
146
165
  session: {
147
166
  showSessionList: true
148
- },
149
- showFirstSession: true,
150
- allowUpload: true
167
+ }
151
168
  },
152
169
  providerId: "demo-provider"
153
170
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/XAdkWebProvider/XAdkWebProvider.stories.tsx"],
4
- "sourcesContent": ["import React from 'react';\nimport type { Meta, StoryObj } from '@storybook/react-vite';\nimport { Button } from 'antd';\nimport XAdkWebProvider from './index';\n\nconst meta: Meta<typeof XAdkWebProvider> = {\n title: 'AI组件/XAdkWebProvider AI容器',\n component: XAdkWebProvider,\n parameters: {\n layout: 'centered',\n docs: {\n description: {\n component: 'AI 聊天机器人容器组件,提供全局上下文和消息管理功能。',\n },\n },\n },\n tags: ['autodocs'],\n argTypes: {\n config: {\n description: '配置信息',\n table: {\n type: {\n summary: 'XAdkWebProviderConfig',\n detail: `{\n appNo?: string; // 应用唯一编号\n }`,\n },\n category: '配置选项',\n },\n },\n },\n // 添加装饰器,确保组件有必要的上下文\n decorators: [\n (Story) => (\n <div style={{ padding: '20px' }}>\n <Story />\n </div>\n ),\n ],\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// 使用 Provider 的 XAiChatbot\nexport const 单聊天窗口实例: Story = {\n render: (args) => {\n const providerRef = React.useRef<any>(null);\n\n const handleSendMessage = () => {\n if (providerRef.current?.chat) {\n providerRef.current.chat({ text: '你好,AI!' });\n } else {\n console.log('XAdkWebProvider ref 未准备好或 chat 方法不存在');\n }\n };\n\n return (\n <div style={{ display: 'flex' }}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px', marginRight: '24px', justifyContent: 'center' }}>\n <Button type=\"primary\" onClick={handleSendMessage}>发送消息</Button>\n </div>\n <div style={{ maxWidth: '350px', height: '600px' }}>\n <XAdkWebProvider\n ref={providerRef}\n {...args}\n // onError={(providerError) => console.log(providerError)}\n // onMessage={(data) => console.log(data)}\n >\n </XAdkWebProvider>\n </div>\n </div>\n );\n },\n args: {\n url: 'https://m-poc-dev.zaxline.com',\n token: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiVjRTT0htSm8zWmVhNFJOdWc3WFgyQT09Iiwic2NvcGUiOlsiTUZYNVR4bGhlSUtiZWtaSEtvZU9WTmxvIl0sImV4cCI6MTc2Nzk1MjM0NywianRpIjoiSHpLMll4cVdjSTA3QWtmOHlsQXYwV0w0aE5jIiwiY2xpZW50X2lkIjoiTUZYNVR4bGhlSUtiZWtaSEtvZU9WTmxvIn0.AjABoyZFxAACkfy-ywLlfaJd6YY0Ir3pBGx_-HzW9di9p_4rnptbFI4adk9pktSVtlLB0cs45SU6uzp6VCJUj9-q-MP8QBqL6i7u2HV9e-kuBJgyIZD4t0PsazpJNu4rDlBAymYzw73ptLPjCwsUkckUz4Xhy1WmR8mpmuG0nuSWzlDlWKiaPgeMhA0Cnp4BV47zplvQ-r60VkarCg9JGHQNmIkQfG3llcjc-ZK4UKVkrFZynXhcCsp1ry7TwfRnwtXwQ1kZXDmeQxWFudhVaHwthraFF-fkHmYZpyTDrZQJY2Rn9nWO59ZHNh3I6-KiKdsNzv8Jl5T_dCUVPj7l3w',\n config: {\n appNo: 'MFX5TxlheIKbekZHKoeOVNlo',\n },\n providerId: 'demo-provider',\n },\n};\n\n\n// 使用 Provider 的 XAiChatbot\nexport const 携带历史记录实例: Story = {\n render: (args) => {\n const providerRef = React.useRef<any>(null);\n\n const handleSendMessage = () => {\n if (providerRef.current?.chat) {\n providerRef.current.chat({\n text: '你好,AI!', // 上传文案\n files: [], // 如果需要上传附件\n });\n } else {\n console.log('XAdkWebProvider ref 未准备好或 chat 方法不存在');\n }\n };\n\n const handleOnEvent = (event: any) => {\n const { code, data } = event;\n console.warn(code);\n if (code === 'SESSION_SWITCH') {\n console.log(providerRef.current.getMessages());\n } else if (code === 'APP_MESSAGES_INIT_SUCCESS') {\n console.log(code, data);\n }\n };\n\n return (\n <div style={{ display: 'flex' }}>\n <div style={{ height: '600px', width: '100vw' }}>\n <XAdkWebProvider\n ref={providerRef}\n {...args}\n onError={(providerError) => console.log(providerError)}\n onSuccess={handleOnEvent}\n onStream={(data) => console.log(data)}\n onEvent={handleOnEvent}\n />\n </div>\n </div>\n );\n },\n args: {\n url: 'https://m-poc.zaxline.com',\n token: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiU0tUYkp6MDE5bWFVdnFqcC9OUGJEQT09Iiwic2NvcGUiOlsiMGhic2RXYkZVYktZRXkxMEsxNDM3WFhtIl0sImV4cCI6MTc2OTE2MzM1NCwianRpIjoiSlFGN21SSEwyLWFhaVF3Nlh0Q19mcEw3eTEwIiwiY2xpZW50X2lkIjoiMGhic2RXYkZVYktZRXkxMEsxNDM3WFhtIn0.NxxxWuSjnDt6Md79wOJX2AznuZ0sE4vZ8p9Gdva-ncDt-Qz6ghUUlKq47HIgAdrnDxIABU7H0RsHXv43rzFcBTK5GMr-SprF4TqhbMbhhEdTwGPgN76kaJVh4SagfbczWuIVBQl4PIzVZ2yMrYz0M2itYYoaAfvnbGBfRIZ6MJIhM-BCAAjrv86I3qDHnYQedjKmdiS9CXeoOt_lqQWk-GU-wl2FhkTsmo4Xt9PD055PPdEmsGCj5I__lIe4W2jqtGPmq82SNfLuzd0TUU7kmf6maUgLqVIRX7EUv51tW4P9BjnNP6fkG7Gkvte46pcO93OAXSlxd7QZ7jca5Gs62w',\n config: {\n appNo: '0hbsdWbFUbKYEy10K1437XXm',\n session: {\n showSessionList: true,\n },\n showFirstSession: true,\n allowUpload: true\n },\n providerId: 'demo-provider',\n },\n};"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import React, { useEffect } from \"react\";\nimport type { Meta, StoryObj } from \"@storybook/react-vite\";\nimport { Button } from \"antd\";\nimport XAdkWebProvider from \"./index\";\n\nconst meta: Meta<typeof XAdkWebProvider> = {\n title: \"AI组件/XAdkWebProvider AI容器\",\n component: XAdkWebProvider,\n parameters: {\n layout: \"centered\",\n docs: {\n description: {\n component: \"AI 聊天机器人容器组件,提供全局上下文和消息管理功能。\",\n },\n },\n },\n tags: [\"autodocs\"],\n argTypes: {\n config: {\n description: \"配置信息\",\n table: {\n type: {\n summary: \"XAdkWebProviderConfig\",\n detail: `{\n appNo?: string; // 应用唯一编号\n }`,\n },\n category: \"配置选项\",\n },\n },\n },\n // 添加装饰器,确保组件有必要的上下文\n decorators: [\n (Story) => (\n <div style={{ padding: \"20px\" }}>\n <Story />\n </div>\n ),\n ],\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// 使用 Provider 的 XAiChatbot\nexport const 单聊天窗口实例: Story = {\n render: (args) => {\n const providerRef = React.useRef<any>(null);\n\n const handleSendMessage = () => {\n if (providerRef.current?.chat) {\n providerRef.current.chat({ text: \"你好,AI!\" });\n } else {\n console.log(\"XAdkWebProvider ref 未准备好或 chat 方法不存在\");\n }\n };\n\n return (\n <div style={{ display: \"flex\" }}>\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"12px\",\n marginRight: \"24px\",\n justifyContent: \"center\",\n }}\n >\n <Button type=\"primary\" onClick={handleSendMessage}>\n 发送消息\n </Button>\n </div>\n <div style={{ maxWidth: \"350px\", height: \"600px\" }}>\n <XAdkWebProvider\n ref={providerRef}\n {...args}\n // onError={(providerError) => console.log(providerError)}\n // onMessage={(data) => console.log(data)}\n ></XAdkWebProvider>\n </div>\n </div>\n );\n },\n args: {\n url: \"https://m-poc-dev.zaxline.com\",\n token:\n \"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiVjRTT0htSm8zWmVhNFJOdWc3WFgyQT09Iiwic2NvcGUiOlsiTUZYNVR4bGhlSUtiZWtaSEtvZU9WTmxvIl0sImV4cCI6MTc2Nzk1MjM0NywianRpIjoiSHpLMll4cVdjSTA3QWtmOHlsQXYwV0w0aE5jIiwiY2xpZW50X2lkIjoiTUZYNVR4bGhlSUtiZWtaSEtvZU9WTmxvIn0.AjABoyZFxAACkfy-ywLlfaJd6YY0Ir3pBGx_-HzW9di9p_4rnptbFI4adk9pktSVtlLB0cs45SU6uzp6VCJUj9-q-MP8QBqL6i7u2HV9e-kuBJgyIZD4t0PsazpJNu4rDlBAymYzw73ptLPjCwsUkckUz4Xhy1WmR8mpmuG0nuSWzlDlWKiaPgeMhA0Cnp4BV47zplvQ-r60VkarCg9JGHQNmIkQfG3llcjc-ZK4UKVkrFZynXhcCsp1ry7TwfRnwtXwQ1kZXDmeQxWFudhVaHwthraFF-fkHmYZpyTDrZQJY2Rn9nWO59ZHNh3I6-KiKdsNzv8Jl5T_dCUVPj7l3w\",\n config: {\n appNo: \"MFX5TxlheIKbekZHKoeOVNlo\",\n },\n providerId: \"demo-provider\",\n },\n};\n\n// 使用 Provider 的 XAiChatbot\nexport const 携带历史记录实例: Story = {\n render: (args) => {\n const providerRef = React.useRef<any>(null);\n\n const handleSendMessage = () => {\n if (providerRef.current?.startChat) {\n providerRef.current.startChat({\n text: \"你好,AI!\", // 上传文案\n files: [], // 如果需要上传附件\n });\n } else {\n console.log(\"XAdkWebProvider ref 未准备好或 chat 方法不存在\");\n }\n };\n\n const handleOnEvent = (event: any) => {\n const { code, data } = event;\n console.warn(code);\n if (code === \"SESSION_SWITCH\") {\n console.log(providerRef.current.getMessages());\n } else if (code === \"APP_MESSAGES_INIT_SUCCESS\") {\n console.log(code, data);\n } else if (code === \"APP_CONFIG_INIT_SUCCESS\") {\n setTimeout(() => {\n handleSendMessage();\n }, 2000);\n }\n };\n\n return (\n <div style={{ display: \"flex\" }}>\n <div style={{ height: \"600px\", width: \"100vw\" }}>\n <XAdkWebProvider\n ref={providerRef}\n {...args}\n onError={(providerError) => console.log(providerError)}\n onSuccess={handleOnEvent}\n onStream={(data) => console.log(data)}\n onEvent={handleOnEvent}\n />\n </div>\n </div>\n );\n },\n args: {\n url: \"https://m-poc-dev.zaxline.com\",\n token:\n \"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJhdWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJuYmYiOjE3NzI3MDA1MzcsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3MjcwNzczNywiaWF0IjoxNzcyNzAwNTM3LCJqdGkiOiJlZWM3NzA2Mi01YmNjLTRlOTgtYTExZC1hOThjN2Q3NmZlZjIiLCJjbGllbnRfaWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08ifQ.eDF_7XsgyAehFXTfB-6FcJglLDacEQz-UGLYGuI3lv-QQnSLekK5DvHBBA9T56OZ6DlQLMC3vhtvJV10lQwigWLE-b4fYTM205mhrtcBQFTUu0EBRTm0g_5sItw-0qaR9E6729H4s8Ty8zyst_nwGhxHWGMjg80cZM47UXhzEpL18wr2JDEWZmq7ZrvxFxqGiR2kjHMB1MOqIEIqGdwBmIDWkZus1qOFJzKN2tSd5Rd4hcLW3pdXmcEJZnVQfAwjqUTu5Peq7mSS0jXh_CIie8tJMOBX7-Fy3N10GSuYZSPCm3Aw0SPnRKgqzh2l4_401yw0lbX36QHBrTOxlXu_Zw\",\n config: {\n appNo: \"3jt2YbDjewVn2PHRKaDfJEgO\",\n chatProps: {\n clearBtnShow: false,\n },\n session: {\n showSessionList: true,\n },\n },\n providerId: \"demo-provider\",\n },\n};\n"],
5
+ "mappings": "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",
6
6
  "names": ["XAdkWebProvider", "React"]
7
7
  }
@@ -0,0 +1,6 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import XAiThoughtChain from ".";
3
+ declare const meta: Meta<typeof XAiThoughtChain>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const 基础用法: Story;