@ai-group/chat-sdk 3.7.4 → 3.8.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/README.md +36 -0
  2. package/dist/cjs/components/DislikeFeedback.js.map +2 -2
  3. package/dist/cjs/components/FileGallery/index.js +2 -1
  4. package/dist/cjs/components/FileGallery/index.js.map +3 -3
  5. package/dist/cjs/components/FolderTree/DirectoryTree.js.map +2 -2
  6. package/dist/cjs/components/Sources/components/CarouselCard.js.map +2 -2
  7. package/dist/cjs/components/XAdkChatbot/index.js +94 -18
  8. package/dist/cjs/components/XAdkChatbot/index.js.map +3 -3
  9. package/dist/cjs/components/XAdkChatbot/styles.d.ts +3 -0
  10. package/dist/cjs/components/XAdkChatbot/styles.js +34 -1
  11. package/dist/cjs/components/XAdkChatbot/styles.js.map +2 -2
  12. package/dist/cjs/components/XAdkChatbot/utils.d.ts +14 -0
  13. package/dist/cjs/components/XAdkChatbot/utils.js +79 -0
  14. package/dist/cjs/components/XAdkChatbot/utils.js.map +7 -0
  15. package/dist/cjs/components/XAdkProvider/compound/Chatbot.d.ts +3 -3
  16. package/dist/cjs/components/XAdkProvider/compound/Chatbot.js +3 -1
  17. package/dist/cjs/components/XAdkProvider/compound/Chatbot.js.map +2 -2
  18. package/dist/cjs/components/XAdkProvider/compound/DislikeFeedBack.js.map +2 -2
  19. package/dist/cjs/components/XAdkProvider/compound/Messages.js +2 -0
  20. package/dist/cjs/components/XAdkProvider/compound/Messages.js.map +2 -2
  21. package/dist/cjs/components/XAdkProvider/compound/Sidebar.js.map +2 -2
  22. package/dist/cjs/components/XAdkProvider/context/ChatStateContext.d.ts +2 -0
  23. package/dist/cjs/components/XAdkProvider/context/ChatStateContext.js.map +2 -2
  24. package/dist/cjs/components/XAdkProvider/index.js +3 -0
  25. package/dist/cjs/components/XAdkProvider/index.js.map +2 -2
  26. package/dist/cjs/components/XAdkSender/InputTags.js.map +2 -2
  27. package/dist/cjs/components/XAdkThoughtChain/index.js +23 -28
  28. package/dist/cjs/components/XAdkThoughtChain/index.js.map +2 -2
  29. package/dist/cjs/components/XAdkThoughtChain/styles.d.ts +3 -1
  30. package/dist/cjs/components/XAdkThoughtChain/styles.js +63 -29
  31. package/dist/cjs/components/XAdkThoughtChain/styles.js.map +2 -2
  32. package/dist/cjs/components/XAiChatbot/index.js.map +2 -2
  33. package/dist/cjs/components/XAiConversations/index.js +2 -1
  34. package/dist/cjs/components/XAiConversations/index.js.map +3 -3
  35. package/dist/cjs/components/XAiProvider/index.js.map +2 -2
  36. package/dist/cjs/components/XAiSender/index.js.map +2 -2
  37. package/dist/cjs/hooks/useADKChat.d.ts +6 -1
  38. package/dist/cjs/hooks/useADKChat.js +22 -3
  39. package/dist/cjs/hooks/useADKChat.js.map +2 -2
  40. package/dist/cjs/hooks/useADKMessageQueue.d.ts +22 -0
  41. package/dist/cjs/hooks/useADKMessageQueue.js +105 -0
  42. package/dist/cjs/hooks/useADKMessageQueue.js.map +7 -0
  43. package/dist/cjs/index.d.ts +3 -1
  44. package/dist/cjs/index.js +3 -0
  45. package/dist/cjs/index.js.map +2 -2
  46. package/dist/cjs/react/index.d.ts +2 -0
  47. package/dist/cjs/react/index.js +3 -0
  48. package/dist/cjs/react/index.js.map +2 -2
  49. package/dist/cjs/types/XAdkChatbot.d.ts +13 -0
  50. package/dist/cjs/types/XAdkChatbot.js.map +1 -1
  51. package/dist/cjs/types/XAdkProvider.d.ts +7 -0
  52. package/dist/cjs/types/XAdkProvider.js.map +2 -2
  53. package/dist/cjs/types/XAdkThoughtChain.d.ts +2 -0
  54. package/dist/cjs/types/XAdkThoughtChain.js.map +1 -1
  55. package/dist/cjs/types/antdx.d.ts +2 -2
  56. package/dist/cjs/types/antdx.js.map +1 -1
  57. package/dist/esm/components/DislikeFeedback.js.map +1 -1
  58. package/dist/esm/components/FileGallery/index.js +2 -1
  59. package/dist/esm/components/FileGallery/index.js.map +1 -1
  60. package/dist/esm/components/FolderTree/DirectoryTree.js.map +1 -1
  61. package/dist/esm/components/Sources/components/CarouselCard.js.map +1 -1
  62. package/dist/esm/components/XAdkChatbot/index.js +89 -14
  63. package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
  64. package/dist/esm/components/XAdkChatbot/styles.d.ts +3 -0
  65. package/dist/esm/components/XAdkChatbot/styles.js +27 -24
  66. package/dist/esm/components/XAdkChatbot/styles.js.map +1 -1
  67. package/dist/esm/components/XAdkChatbot/utils.d.ts +14 -0
  68. package/dist/esm/components/XAdkChatbot/utils.js +66 -0
  69. package/dist/esm/components/XAdkChatbot/utils.js.map +1 -0
  70. package/dist/esm/components/XAdkProvider/compound/Chatbot.d.ts +3 -3
  71. package/dist/esm/components/XAdkProvider/compound/Chatbot.js +10 -7
  72. package/dist/esm/components/XAdkProvider/compound/Chatbot.js.map +1 -1
  73. package/dist/esm/components/XAdkProvider/compound/DislikeFeedBack.js.map +1 -1
  74. package/dist/esm/components/XAdkProvider/compound/Messages.js +5 -1
  75. package/dist/esm/components/XAdkProvider/compound/Messages.js.map +1 -1
  76. package/dist/esm/components/XAdkProvider/compound/Sidebar.js.map +1 -1
  77. package/dist/esm/components/XAdkProvider/context/ChatStateContext.d.ts +2 -0
  78. package/dist/esm/components/XAdkProvider/context/ChatStateContext.js.map +1 -1
  79. package/dist/esm/components/XAdkProvider/index.js +4 -2
  80. package/dist/esm/components/XAdkProvider/index.js.map +1 -1
  81. package/dist/esm/components/XAdkSender/InputTags.js.map +1 -1
  82. package/dist/esm/components/XAdkThoughtChain/index.js +52 -78
  83. package/dist/esm/components/XAdkThoughtChain/index.js.map +1 -1
  84. package/dist/esm/components/XAdkThoughtChain/styles.d.ts +3 -1
  85. package/dist/esm/components/XAdkThoughtChain/styles.js +28 -26
  86. package/dist/esm/components/XAdkThoughtChain/styles.js.map +1 -1
  87. package/dist/esm/components/XAiChatbot/index.js.map +1 -1
  88. package/dist/esm/components/XAiConversations/index.js +2 -1
  89. package/dist/esm/components/XAiConversations/index.js.map +1 -1
  90. package/dist/esm/components/XAiProvider/index.js.map +1 -1
  91. package/dist/esm/components/XAiSender/index.js.map +1 -1
  92. package/dist/esm/hooks/useADKChat.d.ts +6 -1
  93. package/dist/esm/hooks/useADKChat.js +44 -17
  94. package/dist/esm/hooks/useADKChat.js.map +1 -1
  95. package/dist/esm/hooks/useADKMessageQueue.d.ts +22 -0
  96. package/dist/esm/hooks/useADKMessageQueue.js +157 -0
  97. package/dist/esm/hooks/useADKMessageQueue.js.map +1 -0
  98. package/dist/esm/index.d.ts +3 -1
  99. package/dist/esm/index.js +2 -1
  100. package/dist/esm/index.js.map +1 -1
  101. package/dist/esm/react/index.d.ts +2 -0
  102. package/dist/esm/react/index.js +1 -0
  103. package/dist/esm/react/index.js.map +1 -1
  104. package/dist/esm/types/XAdkChatbot.d.ts +13 -0
  105. package/dist/esm/types/XAdkChatbot.js.map +1 -1
  106. package/dist/esm/types/XAdkProvider.d.ts +7 -0
  107. package/dist/esm/types/XAdkProvider.js.map +1 -1
  108. package/dist/esm/types/XAdkThoughtChain.d.ts +2 -0
  109. package/dist/esm/types/XAdkThoughtChain.js.map +1 -1
  110. package/dist/esm/types/antdx.d.ts +2 -2
  111. package/dist/esm/types/antdx.js.map +1 -1
  112. package/dist/umd/chat-sdk.min.js +1 -1
  113. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["Button","Form","Input","message","Popover","React","useState","DislikeFilled","DislikeOutlined","FeedbackTags","jsx","_jsx","jsxs","_jsxs","DislikeFeedback","_ref","_msg$isLike","msg","activeColor","onSubmit","_Form$useForm","useForm","_Form$useForm2","_slicedToArray","form","_useState","_useState2","showFeedback","setShowFeedback","currentIsLike","isLike","trigger","open","onOpenChange","v","warning","resetFields","title","children","style","color","fontWeight","marginBottom","content","Item","name","TextArea","rows","placeholder","dependencies","noStyle","_ref2","getFieldValue","feedbackTags","feedbackDescription","disabled","length","type","block","onClick","_asyncToGenerator","_regeneratorRuntime","mark","_callee","formData","res","wrap","_callee$","_context","prev","next","validateFields","sent","stop","cursor"],"sources":["../../../../../src/components/XAdkProvider/compound/DislikeFeedBack.tsx"],"sourcesContent":["import { Button, Form, Input, message, Popover } from \"antd\";\nimport React, { useState } from \"react\";\nimport { DislikeFilled, DislikeOutlined } from \"@ant-design/icons\";\nimport FeedbackTags from \"./FeedbackTags\";\n\nexport interface DislikeFeedbackProps {\n msg: any;\n activeColor: string;\n onSubmit: (v: any) => Promise<boolean>;\n}\n\nexport const DislikeFeedback: React.FC<DislikeFeedbackProps> = ({\n msg,\n activeColor,\n onSubmit,\n}) => {\n const [form] = Form.useForm();\n const [showFeedback, setShowFeedback] = useState(false);\n\n // msg 是 ChatGroup 对象,isLike 在同层\n const currentIsLike = msg.isLike ?? 0;\n\n return (\n <Popover\n trigger={[\"click\"]}\n open={showFeedback}\n onOpenChange={(v) => {\n if (v && currentIsLike !== 0) {\n message.warning(\"已收到您的反馈,无需重复提交\");\n return;\n }\n if (v) {\n form.resetFields();\n }\n setShowFeedback(v);\n }}\n title={\n <div>\n <div>抱歉,未能满足您的需求</div>\n <div\n style={{ color: \"#999\", fontWeight: \"normal\", marginBottom: 12 }}\n >\n 为提升您的使用体验,请告诉我们不足的方向\n </div>\n </div>\n }\n content={\n <div>\n <Form form={form}>\n <Form.Item name=\"feedbackTags\" style={{ marginBottom: 12 }}>\n <FeedbackTags />\n </Form.Item>\n <Form.Item name=\"feedbackDescription\" style={{ marginBottom: 12 }}>\n <Input.TextArea rows={4} placeholder=\"欢迎说说你的想法\" />\n </Form.Item>\n <Form.Item\n dependencies={[\"feedbackTags\", \"feedbackDescription\"]}\n noStyle\n >\n {({ getFieldValue }) => {\n const feedbackTags = getFieldValue(\"feedbackTags\") || [];\n const feedbackDescription = getFieldValue(\n \"feedbackDescription\",\n );\n const disabled = !feedbackTags.length && !feedbackDescription;\n return (\n <Button\n type=\"primary\"\n block\n disabled={disabled}\n onClick={async () => {\n const formData = await form.validateFields();\n const res = await onSubmit(formData);\n if (res) {\n setShowFeedback(false);\n }\n }}\n >\n 提交反馈\n </Button>\n );\n }}\n </Form.Item>\n </Form>\n </div>\n }\n >\n {currentIsLike === -1 ? (\n <DislikeFilled style={{ color: activeColor, cursor: \"pointer\" }} />\n ) : (\n <DislikeOutlined style={{ color: \"#81858c\", cursor: \"pointer\" }} />\n )}\n </Popover>\n );\n};\n\nexport default DislikeFeedback;\n"],"mappings":";;;AAAA,SAASA,MAAM,EAAEC,IAAI,EAAEC,KAAK,EAAEC,OAAO,EAAEC,OAAO,QAAQ,MAAM;AAC5D,OAAOC,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,SAASC,aAAa,EAAEC,eAAe,QAAQ,mBAAmB;AAClE,OAAOC,YAAY;AAAuB,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAQ1C,OAAO,IAAMC,eAA+C,GAAG,SAAlDA,eAA+CA,CAAAC,IAAA,EAItD;EAAA,IAAAC,WAAA;EAAA,IAHJC,GAAG,GAAAF,IAAA,CAAHE,GAAG;IACHC,WAAW,GAAAH,IAAA,CAAXG,WAAW;IACXC,QAAQ,GAAAJ,IAAA,CAARI,QAAQ;EAER,IAAAC,aAAA,GAAenB,IAAI,CAACoB,OAAO,CAAC,CAAC;IAAAC,cAAA,GAAAC,cAAA,CAAAH,aAAA;IAAtBI,IAAI,GAAAF,cAAA;EACX,IAAAG,SAAA,GAAwCnB,QAAQ,CAAC,KAAK,CAAC;IAAAoB,UAAA,GAAAH,cAAA,CAAAE,SAAA;IAAhDE,YAAY,GAAAD,UAAA;IAAEE,eAAe,GAAAF,UAAA;;EAEpC;EACA,IAAMG,aAAa,IAAAb,WAAA,GAAGC,GAAG,CAACa,MAAM,cAAAd,WAAA,cAAAA,WAAA,GAAI,CAAC;EAErC,oBACEL,IAAA,CAACP,OAAO;IACN2B,OAAO,EAAE,CAAC,OAAO,CAAE;IACnBC,IAAI,EAAEL,YAAa;IACnBM,YAAY,EAAE,SAAAA,aAACC,CAAC,EAAK;MACnB,IAAIA,CAAC,IAAIL,aAAa,KAAK,CAAC,EAAE;QAC5B1B,OAAO,CAACgC,OAAO,CAAC,gBAAgB,CAAC;QACjC;MACF;MACA,IAAID,CAAC,EAAE;QACLV,IAAI,CAACY,WAAW,CAAC,CAAC;MACpB;MACAR,eAAe,CAACM,CAAC,CAAC;IACpB,CAAE;IACFG,KAAK,eACHxB,KAAA;MAAAyB,QAAA,gBACE3B,IAAA;QAAA2B,QAAA,EAAK;MAAW,CAAK,CAAC,eACtB3B,IAAA;QACE4B,KAAK,EAAE;UAAEC,KAAK,EAAE,MAAM;UAAEC,UAAU,EAAE,QAAQ;UAAEC,YAAY,EAAE;QAAG,CAAE;QAAAJ,QAAA,EAClE;MAED,CAAK,CAAC;IAAA,CACH,CACN;IACDK,OAAO,eACLhC,IAAA;MAAA2B,QAAA,eACEzB,KAAA,CAACZ,IAAI;QAACuB,IAAI,EAAEA,IAAK;QAAAc,QAAA,gBACf3B,IAAA,CAACV,IAAI,CAAC2C,IAAI;UAACC,IAAI,EAAC,cAAc;UAACN,KAAK,EAAE;YAAEG,YAAY,EAAE;UAAG,CAAE;UAAAJ,QAAA,eACzD3B,IAAA,CAACF,YAAY,IAAE;QAAC,CACP,CAAC,eACZE,IAAA,CAACV,IAAI,CAAC2C,IAAI;UAACC,IAAI,EAAC,qBAAqB;UAACN,KAAK,EAAE;YAAEG,YAAY,EAAE;UAAG,CAAE;UAAAJ,QAAA,eAChE3B,IAAA,CAACT,KAAK,CAAC4C,QAAQ;YAACC,IAAI,EAAE,CAAE;YAACC,WAAW,EAAC;UAAU,CAAE;QAAC,CACzC,CAAC,eACZrC,IAAA,CAACV,IAAI,CAAC2C,IAAI;UACRK,YAAY,EAAE,CAAC,cAAc,EAAE,qBAAqB,CAAE;UACtDC,OAAO;UAAAZ,QAAA,EAEN,SAAAA,SAAAa,KAAA,EAAuB;YAAA,IAApBC,aAAa,GAAAD,KAAA,CAAbC,aAAa;YACf,IAAMC,YAAY,GAAGD,aAAa,CAAC,cAAc,CAAC,IAAI,EAAE;YACxD,IAAME,mBAAmB,GAAGF,aAAa,CACvC,qBACF,CAAC;YACD,IAAMG,QAAQ,GAAG,CAACF,YAAY,CAACG,MAAM,IAAI,CAACF,mBAAmB;YAC7D,oBACE3C,IAAA,CAACX,MAAM;cACLyD,IAAI,EAAC,SAAS;cACdC,KAAK;cACLH,QAAQ,EAAEA,QAAS;cACnBI,OAAO,eAAAC,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAE,SAAAC,QAAA;gBAAA,IAAAC,QAAA,EAAAC,GAAA;gBAAA,OAAAJ,mBAAA,GAAAK,IAAA,UAAAC,SAAAC,QAAA;kBAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;oBAAA;sBAAAF,QAAA,CAAAE,IAAA;sBAAA,OACgB9C,IAAI,CAAC+C,cAAc,CAAC,CAAC;oBAAA;sBAAtCP,QAAQ,GAAAI,QAAA,CAAAI,IAAA;sBAAAJ,QAAA,CAAAE,IAAA;sBAAA,OACInD,QAAQ,CAAC6C,QAAQ,CAAC;oBAAA;sBAA9BC,GAAG,GAAAG,QAAA,CAAAI,IAAA;sBACT,IAAIP,GAAG,EAAE;wBACPrC,eAAe,CAAC,KAAK,CAAC;sBACxB;oBAAC;oBAAA;sBAAA,OAAAwC,QAAA,CAAAK,IAAA;kBAAA;gBAAA,GAAAV,OAAA;cAAA,CACF,EAAC;cAAAzB,QAAA,EACH;YAED,CAAQ,CAAC;UAEb;QAAC,CACQ,CAAC;MAAA,CACR;IAAC,CACJ,CACN;IAAAA,QAAA,EAEAT,aAAa,KAAK,CAAC,CAAC,gBACnBlB,IAAA,CAACJ,aAAa;MAACgC,KAAK,EAAE;QAAEC,KAAK,EAAEtB,WAAW;QAAEwD,MAAM,EAAE;MAAU;IAAE,CAAE,CAAC,gBAEnE/D,IAAA,CAACH,eAAe;MAAC+B,KAAK,EAAE;QAAEC,KAAK,EAAE,SAAS;QAAEkC,MAAM,EAAE;MAAU;IAAE,CAAE;EACnE,CACM,CAAC;AAEd,CAAC;AAED,eAAe5D,eAAe"}
1
+ {"version":3,"names":["Button","Form","Input","message","Popover","React","useState","DislikeFilled","DislikeOutlined","FeedbackTags","jsx","_jsx","jsxs","_jsxs","DislikeFeedback","_ref","_msg$isLike","msg","activeColor","onSubmit","_Form$useForm","useForm","_Form$useForm2","_slicedToArray","form","_useState","_useState2","showFeedback","setShowFeedback","currentIsLike","isLike","trigger","open","onOpenChange","v","warning","resetFields","title","children","style","color","fontWeight","marginBottom","content","Item","name","TextArea","rows","placeholder","dependencies","noStyle","_ref2","getFieldValue","feedbackTags","feedbackDescription","disabled","length","type","block","onClick","_asyncToGenerator","_regeneratorRuntime","mark","_callee","formData","res","wrap","_callee$","_context","prev","next","validateFields","sent","stop","cursor"],"sources":["../../../../../src/components/XAdkProvider/compound/DislikeFeedBack.tsx"],"sourcesContent":["import { Button, Form, Input, message, Popover } from \"antd\";\nimport React, { useState } from \"react\";\nimport { DislikeFilled, DislikeOutlined } from \"@ant-design/icons\";\nimport FeedbackTags from \"./FeedbackTags\";\n\nexport interface DislikeFeedbackProps {\n msg: any;\n activeColor: string;\n onSubmit: (v: any) => Promise<boolean>;\n}\n\nexport const DislikeFeedback: React.FC<DislikeFeedbackProps> = ({\n msg,\n activeColor,\n onSubmit,\n}) => {\n const [form] = Form.useForm();\n const [showFeedback, setShowFeedback] = useState(false);\n\n // msg 是 ChatGroup 对象,isLike 在同层\n const currentIsLike = msg.isLike ?? 0;\n\n return (\n <Popover\n trigger={[\"click\"]}\n open={showFeedback}\n onOpenChange={(v: boolean) => {\n if (v && currentIsLike !== 0) {\n message.warning(\"已收到您的反馈,无需重复提交\");\n return;\n }\n if (v) {\n form.resetFields();\n }\n setShowFeedback(v);\n }}\n title={\n <div>\n <div>抱歉,未能满足您的需求</div>\n <div\n style={{ color: \"#999\", fontWeight: \"normal\", marginBottom: 12 }}\n >\n 为提升您的使用体验,请告诉我们不足的方向\n </div>\n </div>\n }\n content={\n <div>\n <Form form={form}>\n <Form.Item name=\"feedbackTags\" style={{ marginBottom: 12 }}>\n <FeedbackTags />\n </Form.Item>\n <Form.Item name=\"feedbackDescription\" style={{ marginBottom: 12 }}>\n <Input.TextArea rows={4} placeholder=\"欢迎说说你的想法\" />\n </Form.Item>\n <Form.Item\n dependencies={[\"feedbackTags\", \"feedbackDescription\"]}\n noStyle\n >\n {({ getFieldValue }: { getFieldValue: (name: string) => any }) => {\n const feedbackTags = getFieldValue(\"feedbackTags\") || [];\n const feedbackDescription = getFieldValue(\n \"feedbackDescription\",\n );\n const disabled = !feedbackTags.length && !feedbackDescription;\n return (\n <Button\n type=\"primary\"\n block\n disabled={disabled}\n onClick={async () => {\n const formData = await form.validateFields();\n const res = await onSubmit(formData);\n if (res) {\n setShowFeedback(false);\n }\n }}\n >\n 提交反馈\n </Button>\n );\n }}\n </Form.Item>\n </Form>\n </div>\n }\n >\n {currentIsLike === -1 ? (\n <DislikeFilled style={{ color: activeColor, cursor: \"pointer\" }} />\n ) : (\n <DislikeOutlined style={{ color: \"#81858c\", cursor: \"pointer\" }} />\n )}\n </Popover>\n );\n};\n\nexport default DislikeFeedback;\n"],"mappings":"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"}
@@ -32,6 +32,7 @@ var Messages = function Messages(_ref) {
32
32
  suggestions = _useChatState.suggestions,
33
33
  initialized = _useChatState.initialized,
34
34
  showFeedback = _useChatState.showFeedback,
35
+ showUserActions = _useChatState.showUserActions,
35
36
  appInfo = _useChatState.appInfo,
36
37
  onFileClick = _useChatState.onFileClick,
37
38
  strategies = _useChatState.strategies;
@@ -171,7 +172,10 @@ var Messages = function Messages(_ref) {
171
172
  style: style
172
173
  // 自定义工具调用渲染
173
174
  ,
174
- renderFunctionCall: renderFunctionCall,
175
+ renderFunctionCall: renderFunctionCall
176
+ // 用户消息 hover 操作栏
177
+ ,
178
+ showUserActions: showUserActions,
175
179
  strategies: _objectSpread(_objectSpread({}, strategies), strategiesProp)
176
180
  });
177
181
  };
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","message","Tooltip","Flex","LikeFilled","LikeOutlined","ReloadOutlined","CopyOutlined","copy","XAdkChatbot","DislikeFeedback","useChatState","useChatActions","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","Messages","_ref","actions","actionsExtra","className","style","showFnCallDetail","renderFunctionCall","strategiesProp","strategies","_useChatState","messages","loading","prologue","suggestions","initialized","showFeedback","appInfo","onFileClick","_useChatActions","suggestChat","reChat","likeMessage","confirmFnCall","primaryColor","appTheme","defaultActions","_ref2","_group$isLike","group","isLastBotMsg","lastMsg","msgs","length","invocationId","isLikeVal","isLike","fullText","filter","m","functionCall","functionResponse","map","text","join","gap","align","padding","color","children","title","cursor","onClick","success","_asyncToGenerator","_regeneratorRuntime","mark","_callee","ok","wrap","_callee$","_context","prev","next","warning","abrupt","sent","error","stop","msg","activeColor","onSubmit","_ref4","_callee2","formData","_callee2$","_context2","_x","apply","arguments","onSuggest","onConfirm","enableGrouping","enableProcessParsing","_objectSpread"],"sources":["../../../../../src/components/XAdkProvider/compound/Messages.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { message, Tooltip, Flex } from \"antd\";\nimport {\n LikeFilled,\n LikeOutlined,\n ReloadOutlined,\n CopyOutlined,\n} from \"@ant-design/icons\";\nimport copy from \"copy-to-clipboard\";\nimport XAdkChatbot from \"../../XAdkChatbot\";\nimport DislikeFeedback from \"./DislikeFeedBack\";\nimport { useChatState } from \"../context/ChatStateContext\";\nimport { useChatActions } from \"../context/ChatActionContext\";\nimport type { ActionExtraProps, ActionProps } from \"@/types\";\nimport type { ChatStrategies } from \"@/types\";\n\nexport interface XAdkMessagesProps {\n /** 自定义操作栏渲染 */\n actions?: ActionProps;\n /** 追加在操作栏之后的内容 */\n actionsExtra?: ActionExtraProps;\n /** 类名 */\n className?: string;\n /** 样式 */\n style?: React.CSSProperties;\n /** 是否显示函数调用详情 */\n showFnCallDetail?: boolean;\n /** 自定义工具调用渲染函数,返回 null 则降级使用默认渲染 */\n renderFunctionCall?: (msg: import(\"@/types\").IMessage) => React.ReactNode | null;\n /** 局部策略覆盖,优先级高于 Provider preset/strategies */\n strategies?: ChatStrategies;\n}\n\n/**\n * Messages - XAdkProvider 的消息展示组件\n *\n * 使用 XAdkChatbot 渲染消息列表\n */\nconst Messages: React.FC<XAdkMessagesProps> = ({\n actions,\n actionsExtra,\n className,\n style,\n showFnCallDetail,\n renderFunctionCall,\n strategies: strategiesProp,\n}) => {\n const {\n messages,\n loading,\n prologue,\n suggestions,\n initialized,\n showFeedback,\n appInfo,\n onFileClick,\n strategies,\n } = useChatState();\n const { suggestChat, reChat, likeMessage, confirmFnCall } = useChatActions();\n\n const primaryColor = appInfo?.appTheme || \"#1677ff\";\n\n const defaultActions = useCallback<ActionProps>(\n ({ message: group, isLastBotMsg }) => {\n // 取该组最后一条 bot 消息的 invocationId 和 isLike 状态\n const lastMsg = group.msgs[group.msgs.length - 1];\n const invocationId = lastMsg?.invocationId;\n const isLikeVal = group.isLike ?? 0;\n\n const fullText = group.msgs\n .filter((m) => !m.functionCall && !m.functionResponse)\n .map((m) => m.text || \"\")\n .join(\"\");\n\n return (\n <Flex\n gap={16}\n align=\"center\"\n style={{ padding: \"4px 0\", color: \"#81858c\" }}\n >\n {isLastBotMsg && (\n <Tooltip title=\"重新生成\">\n <ReloadOutlined style={{ cursor: \"pointer\" }} onClick={reChat} />\n </Tooltip>\n )}\n <Tooltip title=\"复制内容\">\n <CopyOutlined\n style={{ cursor: \"pointer\" }}\n onClick={() => {\n copy(fullText);\n message.success(\"复制成功\");\n }}\n />\n </Tooltip>\n {showFeedback && invocationId && (\n <>\n <Tooltip title=\"赞\">\n {isLikeVal === 1 ? (\n <LikeFilled\n style={{ color: primaryColor, cursor: \"pointer\" }}\n />\n ) : (\n <LikeOutlined\n style={{ cursor: \"pointer\" }}\n onClick={async () => {\n if (isLikeVal !== 0) {\n message.warning(\"已收到您的反馈,无需重复提交\");\n return;\n }\n const ok = await likeMessage(invocationId, 1);\n if (ok) message.success(\"感谢您的反馈\");\n else message.error(\"反馈失败,请稍后再试\");\n }}\n />\n )}\n </Tooltip>\n <DislikeFeedback\n msg={group}\n activeColor={primaryColor}\n onSubmit={async (formData) => {\n const ok = await likeMessage(invocationId, -1, formData);\n if (ok) message.success(\"已收到您的反馈,我们会努力做得更好\");\n else message.error(\"反馈失败,请稍后再试\");\n return ok;\n }}\n />\n </>\n )}\n </Flex>\n );\n },\n [reChat, likeMessage, showFeedback, primaryColor],\n );\n\n return (\n <XAdkChatbot\n messages={messages}\n loading={loading}\n prologue={prologue}\n suggestions={suggestions}\n onSuggest={suggestChat}\n onConfirm={confirmFnCall}\n // 操作栏:使用外部传入的 actions,否则用内置默认 actions\n actions={actions ?? defaultActions}\n actionsExtra={actionsExtra}\n // 启用分组和解析\n enableGrouping={true}\n enableProcessParsing={true}\n initialized={initialized}\n showFnCallDetail={showFnCallDetail}\n // 文件点击回调\n onFileClick={onFileClick}\n // 样式\n className={className}\n style={style}\n // 自定义工具调用渲染\n renderFunctionCall={renderFunctionCall}\n strategies={{ ...strategies, ...strategiesProp }}\n />\n );\n};\n\nexport default Messages;\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useCallback","message","Tooltip","Flex","LikeFilled","LikeOutlined","ReloadOutlined","CopyOutlined","copy","XAdkChatbot","DislikeFeedback","useChatState","useChatActions","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","Messages","_ref","actions","actionsExtra","className","style","showFnCallDetail","renderFunctionCall","strategiesProp","strategies","_useChatState","messages","loading","prologue","suggestions","initialized","showFeedback","showUserActions","appInfo","onFileClick","_useChatActions","suggestChat","reChat","likeMessage","confirmFnCall","primaryColor","appTheme","defaultActions","_ref2","_group$isLike","group","isLastBotMsg","lastMsg","msgs","length","invocationId","isLikeVal","isLike","fullText","filter","m","functionCall","functionResponse","map","text","join","gap","align","padding","color","children","title","cursor","onClick","success","_asyncToGenerator","_regeneratorRuntime","mark","_callee","ok","wrap","_callee$","_context","prev","next","warning","abrupt","sent","error","stop","msg","activeColor","onSubmit","_ref4","_callee2","formData","_callee2$","_context2","_x","apply","arguments","onSuggest","onConfirm","enableGrouping","enableProcessParsing","_objectSpread"],"sources":["../../../../../src/components/XAdkProvider/compound/Messages.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { message, Tooltip, Flex } from \"antd\";\nimport {\n LikeFilled,\n LikeOutlined,\n ReloadOutlined,\n CopyOutlined,\n} from \"@ant-design/icons\";\nimport copy from \"copy-to-clipboard\";\nimport XAdkChatbot from \"../../XAdkChatbot\";\nimport DislikeFeedback from \"./DislikeFeedBack\";\nimport { useChatState } from \"../context/ChatStateContext\";\nimport { useChatActions } from \"../context/ChatActionContext\";\nimport type { ActionExtraProps, ActionProps } from \"@/types\";\nimport type { ChatStrategies } from \"@/types\";\n\nexport interface XAdkMessagesProps {\n /** 自定义操作栏渲染 */\n actions?: ActionProps;\n /** 追加在操作栏之后的内容 */\n actionsExtra?: ActionExtraProps;\n /** 类名 */\n className?: string;\n /** 样式 */\n style?: React.CSSProperties;\n /** 是否显示函数调用详情 */\n showFnCallDetail?: boolean;\n /** 自定义工具调用渲染函数,返回 null 则降级使用默认渲染 */\n renderFunctionCall?: (msg: import(\"@/types\").IMessage) => React.ReactNode | null;\n /** 局部策略覆盖,优先级高于 Provider preset/strategies */\n strategies?: ChatStrategies;\n}\n\n/**\n * Messages - XAdkProvider 的消息展示组件\n *\n * 使用 XAdkChatbot 渲染消息列表\n */\nconst Messages: React.FC<XAdkMessagesProps> = ({\n actions,\n actionsExtra,\n className,\n style,\n showFnCallDetail,\n renderFunctionCall,\n strategies: strategiesProp,\n}) => {\n const {\n messages,\n loading,\n prologue,\n suggestions,\n initialized,\n showFeedback,\n showUserActions,\n appInfo,\n onFileClick,\n strategies,\n } = useChatState();\n const { suggestChat, reChat, likeMessage, confirmFnCall } = useChatActions();\n\n const primaryColor = appInfo?.appTheme || \"#1677ff\";\n\n const defaultActions = useCallback<ActionProps>(\n ({ message: group, isLastBotMsg }) => {\n // 取该组最后一条 bot 消息的 invocationId 和 isLike 状态\n const lastMsg = group.msgs[group.msgs.length - 1];\n const invocationId = lastMsg?.invocationId;\n const isLikeVal = group.isLike ?? 0;\n\n const fullText = group.msgs\n .filter((m) => !m.functionCall && !m.functionResponse)\n .map((m) => m.text || \"\")\n .join(\"\");\n\n return (\n <Flex\n gap={16}\n align=\"center\"\n style={{ padding: \"4px 0\", color: \"#81858c\" }}\n >\n {isLastBotMsg && (\n <Tooltip title=\"重新生成\">\n <ReloadOutlined style={{ cursor: \"pointer\" }} onClick={reChat} />\n </Tooltip>\n )}\n <Tooltip title=\"复制内容\">\n <CopyOutlined\n style={{ cursor: \"pointer\" }}\n onClick={() => {\n copy(fullText);\n message.success(\"复制成功\");\n }}\n />\n </Tooltip>\n {showFeedback && invocationId && (\n <>\n <Tooltip title=\"赞\">\n {isLikeVal === 1 ? (\n <LikeFilled\n style={{ color: primaryColor, cursor: \"pointer\" }}\n />\n ) : (\n <LikeOutlined\n style={{ cursor: \"pointer\" }}\n onClick={async () => {\n if (isLikeVal !== 0) {\n message.warning(\"已收到您的反馈,无需重复提交\");\n return;\n }\n const ok = await likeMessage(invocationId, 1);\n if (ok) message.success(\"感谢您的反馈\");\n else message.error(\"反馈失败,请稍后再试\");\n }}\n />\n )}\n </Tooltip>\n <DislikeFeedback\n msg={group}\n activeColor={primaryColor}\n onSubmit={async (formData) => {\n const ok = await likeMessage(invocationId, -1, formData);\n if (ok) message.success(\"已收到您的反馈,我们会努力做得更好\");\n else message.error(\"反馈失败,请稍后再试\");\n return ok;\n }}\n />\n </>\n )}\n </Flex>\n );\n },\n [reChat, likeMessage, showFeedback, primaryColor],\n );\n\n return (\n <XAdkChatbot\n messages={messages}\n loading={loading}\n prologue={prologue}\n suggestions={suggestions}\n onSuggest={suggestChat}\n onConfirm={confirmFnCall}\n // 操作栏:使用外部传入的 actions,否则用内置默认 actions\n actions={actions ?? defaultActions}\n actionsExtra={actionsExtra}\n // 启用分组和解析\n enableGrouping={true}\n enableProcessParsing={true}\n initialized={initialized}\n showFnCallDetail={showFnCallDetail}\n // 文件点击回调\n onFileClick={onFileClick}\n // 样式\n className={className}\n style={style}\n // 自定义工具调用渲染\n renderFunctionCall={renderFunctionCall}\n // 用户消息 hover 操作栏\n showUserActions={showUserActions}\n strategies={{ ...strategies, ...strategiesProp }}\n />\n );\n};\n\nexport default Messages;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","message","Modal","Input","ExclamationCircleFilled","XAiConversations","useChatState","useChatActions","useSession","useChatSenderState","jsx","_jsx","confirm","Sidebar","_ref","_ref$isNarrow","isNarrow","style","className","_useChatState","currentSessionId","_useChatActions","clearChat","_useSession","sessionList","deleteSession","updateSession","setCurrentSession","_useChatSenderState","setSenderValue","handleActiveChange","key","handleNewChat","defaultMenuConfig","conversation","items","label","danger","onClick","menuInfo","domEvent","stopPropagation","inputValue","title","icon","content","defaultValue","autoFocus","width","onChange","e","target","value","okText","cancelText","okButtonProps","background","borderColor","color","onOk","trim","error","Promise","reject","onCancel","okType","activeKey","onActiveChange","onNewChat","menu","displayName"],"sources":["../../../../../src/components/XAdkProvider/compound/Sidebar.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport { message, Modal, Input } from 'antd';\nimport { ExclamationCircleFilled } from '@ant-design/icons';\nimport type { ConversationsProps } from '@/types/antdx';\nimport XAiConversations from '@/components/XAiConversations';\nimport { useChatState } from '../context/ChatStateContext';\nimport { useChatActions } from '../context/ChatActionContext';\nimport { useSession } from '../context/SessionContext';\nimport { useChatSenderState } from '../context/ChatSenderStateContext';\n\nconst { confirm } = Modal;\n\n/**\n * XAdkProvider.Sidebar - 会话列表侧边栏组件\n *\n * 从 Context 获取会话数据并提供会话管理界面\n * 基于 XAiConversations 组件实现(带展开/收起功能)\n *\n * @example\n * ```tsx\n * <XAdkProvider url=\"...\" token=\"...\">\n * <XAdkProvider.Sidebar isNarrow={false} />\n * </XAdkProvider>\n * ```\n */\nexport interface XAdkSidebarProps {\n /** 额外的样式 */\n style?: React.CSSProperties;\n /** 额外的类名 */\n className?: string;\n /** 是否为窄屏模式 */\n isNarrow?: boolean;\n}\n\nconst Sidebar: React.FC<XAdkSidebarProps> = ({\n isNarrow = false,\n style,\n className,\n}) => {\n const { currentSessionId } = useChatState();\n const { clearChat } = useChatActions();\n const { sessionList, deleteSession, updateSession, setCurrentSession } = useSession();\n const { setSenderValue } = useChatSenderState();\n\n // 切换会话\n const handleActiveChange = useCallback((key: string) => {\n setCurrentSession(key);\n setSenderValue('');\n }, [setCurrentSession, setSenderValue]);\n\n // 新建对话\n const handleNewChat = useCallback(() => {\n clearChat();\n setSenderValue('');\n }, [clearChat, setSenderValue]);\n\n // 默认会话菜单配置\n const defaultMenuConfig: ConversationsProps['menu'] = useCallback((conversation: any) => ({\n items: [\n {\n label: '重命名',\n key: 'edit',\n },\n {\n label: '删除',\n key: 'delete',\n danger: true,\n },\n ],\n onClick: (menuInfo: any) => {\n menuInfo.domEvent.stopPropagation();\n const { key } = menuInfo;\n switch (key) {\n case 'edit': {\n let inputValue = (conversation.label as string) || '';\n confirm({\n title: '编辑对话名称',\n icon: null,\n content: (\n <Input\n defaultValue={inputValue}\n autoFocus\n style={{ width: '100%' }}\n onChange={(e) => {\n inputValue = e.target.value;\n }}\n />\n ),\n okText: '确认',\n cancelText: '取消',\n okButtonProps: {\n style: {\n background: '#000',\n borderColor: '#000',\n color: '#fff',\n },\n },\n onOk: () => {\n if (!inputValue.trim()) {\n message.error('对话名称不能为空');\n return Promise.reject();\n }\n updateSession(conversation.key, inputValue);\n },\n onCancel: () => {\n // 静默处理\n },\n });\n break;\n }\n case 'delete':\n confirm({\n title: '确认删除?',\n icon: <ExclamationCircleFilled />,\n content: '该对话内容将被删除无法恢复。',\n okText: '确认删除',\n okType: 'danger',\n cancelText: '取消',\n okButtonProps: {\n style: {\n background: '#ff4d4f',\n borderColor: '#ff4d4f',\n color: '#fff',\n },\n },\n onOk() {\n deleteSession(conversation.key);\n },\n onCancel() {\n //\n },\n });\n break;\n }\n },\n }), [deleteSession, updateSession]);\n\n return (\n <XAiConversations\n isNarrow={isNarrow}\n sessionList={sessionList}\n activeKey={currentSessionId}\n onActiveChange={handleActiveChange}\n onNewChat={handleNewChat}\n menu={defaultMenuConfig}\n style={style}\n />\n );\n};\n\nSidebar.displayName = 'XAdkProvider.Sidebar';\n\nexport default Sidebar;\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useCallback","message","Modal","Input","ExclamationCircleFilled","XAiConversations","useChatState","useChatActions","useSession","useChatSenderState","jsx","_jsx","confirm","Sidebar","_ref","_ref$isNarrow","isNarrow","style","className","_useChatState","currentSessionId","_useChatActions","clearChat","_useSession","sessionList","deleteSession","updateSession","setCurrentSession","_useChatSenderState","setSenderValue","handleActiveChange","key","handleNewChat","defaultMenuConfig","conversation","items","label","danger","onClick","menuInfo","domEvent","stopPropagation","inputValue","title","icon","content","defaultValue","autoFocus","width","onChange","e","target","value","okText","cancelText","okButtonProps","background","borderColor","color","onOk","trim","error","Promise","reject","onCancel","okType","activeKey","onActiveChange","onNewChat","menu","displayName"],"sources":["../../../../../src/components/XAdkProvider/compound/Sidebar.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport { message, Modal, Input } from 'antd';\nimport { ExclamationCircleFilled } from '@ant-design/icons';\nimport type { ConversationsProps } from '@/types/antdx';\nimport XAiConversations from '@/components/XAiConversations';\nimport { useChatState } from '../context/ChatStateContext';\nimport { useChatActions } from '../context/ChatActionContext';\nimport { useSession } from '../context/SessionContext';\nimport { useChatSenderState } from '../context/ChatSenderStateContext';\n\nconst { confirm } = Modal;\n\n/**\n * XAdkProvider.Sidebar - 会话列表侧边栏组件\n *\n * 从 Context 获取会话数据并提供会话管理界面\n * 基于 XAiConversations 组件实现(带展开/收起功能)\n *\n * @example\n * ```tsx\n * <XAdkProvider url=\"...\" token=\"...\">\n * <XAdkProvider.Sidebar isNarrow={false} />\n * </XAdkProvider>\n * ```\n */\nexport interface XAdkSidebarProps {\n /** 额外的样式 */\n style?: React.CSSProperties;\n /** 额外的类名 */\n className?: string;\n /** 是否为窄屏模式 */\n isNarrow?: boolean;\n}\n\nconst Sidebar: React.FC<XAdkSidebarProps> = ({\n isNarrow = false,\n style,\n className,\n}) => {\n const { currentSessionId } = useChatState();\n const { clearChat } = useChatActions();\n const { sessionList, deleteSession, updateSession, setCurrentSession } = useSession();\n const { setSenderValue } = useChatSenderState();\n\n // 切换会话\n const handleActiveChange = useCallback((key: string) => {\n setCurrentSession(key);\n setSenderValue('');\n }, [setCurrentSession, setSenderValue]);\n\n // 新建对话\n const handleNewChat = useCallback(() => {\n clearChat();\n setSenderValue('');\n }, [clearChat, setSenderValue]);\n\n // 默认会话菜单配置\n const defaultMenuConfig: ConversationsProps['menu'] = useCallback((conversation: any) => ({\n items: [\n {\n label: '重命名',\n key: 'edit',\n },\n {\n label: '删除',\n key: 'delete',\n danger: true,\n },\n ],\n onClick: (menuInfo: any) => {\n menuInfo.domEvent.stopPropagation();\n const { key } = menuInfo;\n switch (key) {\n case 'edit': {\n let inputValue = (conversation.label as string) || '';\n confirm({\n title: '编辑对话名称',\n icon: null,\n content: (\n <Input\n defaultValue={inputValue}\n autoFocus\n style={{ width: '100%' }}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n inputValue = e.target.value;\n }}\n />\n ),\n okText: '确认',\n cancelText: '取消',\n okButtonProps: {\n style: {\n background: '#000',\n borderColor: '#000',\n color: '#fff',\n },\n },\n onOk: () => {\n if (!inputValue.trim()) {\n message.error('对话名称不能为空');\n return Promise.reject();\n }\n updateSession(conversation.key, inputValue);\n },\n onCancel: () => {\n // 静默处理\n },\n });\n break;\n }\n case 'delete':\n confirm({\n title: '确认删除?',\n icon: <ExclamationCircleFilled />,\n content: '该对话内容将被删除无法恢复。',\n okText: '确认删除',\n okType: 'danger',\n cancelText: '取消',\n okButtonProps: {\n style: {\n background: '#ff4d4f',\n borderColor: '#ff4d4f',\n color: '#fff',\n },\n },\n onOk() {\n deleteSession(conversation.key);\n },\n onCancel() {\n //\n },\n });\n break;\n }\n },\n }), [deleteSession, updateSession]);\n\n return (\n <XAiConversations\n isNarrow={isNarrow}\n sessionList={sessionList}\n activeKey={currentSessionId}\n onActiveChange={handleActiveChange}\n onNewChat={handleNewChat}\n menu={defaultMenuConfig}\n style={style}\n />\n );\n};\n\nSidebar.displayName = 'XAdkProvider.Sidebar';\n\nexport default Sidebar;\n"],"mappings":"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"}
@@ -27,6 +27,8 @@ export interface ChatStateContextType {
27
27
  initialized: boolean;
28
28
  /** 是否展示点赞/点踩 */
29
29
  showFeedback: boolean;
30
+ /** 是否启用用户消息 hover 操作栏 */
31
+ showUserActions: boolean;
30
32
  /** 点击附件回调 */
31
33
  onFileClick?: (file: FileItem) => void;
32
34
  onConfirm?: () => void;
@@ -1 +1 @@
1
- {"version":3,"names":["createContext","useContext","ChatStateContext","useChatState","context","Error"],"sources":["../../../../../src/components/XAdkProvider/context/ChatStateContext.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { IMessage, FileItem, UploadRequestFn, ChatStrategies } from \"@/types\";\nimport type { ChatConfig } from \"@/services/api\";\n\n/**\n * 聊天状态 Context\n * 只包含状态数据,不包含操作方法\n * 这样可以避免不必要的 rerender\n */\nexport interface ChatStateContextType {\n /** 请求地址 */\n url: string;\n /** 会话令牌 */\n token: string;\n /** 消息列表 */\n messages: IMessage[];\n /** 加载状态 */\n loading: boolean;\n /** 当前会话 ID */\n currentSessionId: string;\n /** 开场白 */\n prologue: string;\n /** 建议问题列表 */\n suggestions: string[];\n /** 应用配置信息 */\n appInfo: ChatConfig | null;\n /** 是否已初始化 */\n initialized: boolean;\n /** 是否展示点赞/点踩 */\n showFeedback: boolean;\n /** 点击附件回调 */\n onFileClick?: (file: FileItem) => void;\n // 确认工具执行回调 */\n onConfirm?: () => void;\n /** 自定义上传函数 */\n uploadRequest?: UploadRequestFn;\n /** 当前 Provider 生效的聊天策略 */\n strategies: ChatStrategies;\n}\n\nexport const ChatStateContext = createContext<ChatStateContextType | null>(\n null,\n);\n\n/**\n * 使用聊天状态 Hook\n * @returns ChatStateContextType\n * @throws Error 如果在 XAdkProvider 外部使用\n */\nexport const useChatState = () => {\n const context = useContext(ChatStateContext);\n if (!context) {\n throw new Error(\"useChatState must be used within XAdkProvider\");\n }\n return context;\n};\n"],"mappings":"AAAA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;;AAIjD;AACA;AACA;AACA;AACA;;AAgCA,OAAO,IAAMC,gBAAgB,gBAAGF,aAAa,CAC3C,IACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMG,YAAY,GAAG,SAAfA,YAAYA,CAAA,EAAS;EAChC,IAAMC,OAAO,GAAGH,UAAU,CAACC,gBAAgB,CAAC;EAC5C,IAAI,CAACE,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CAAC,+CAA+C,CAAC;EAClE;EACA,OAAOD,OAAO;AAChB,CAAC"}
1
+ {"version":3,"names":["createContext","useContext","ChatStateContext","useChatState","context","Error"],"sources":["../../../../../src/components/XAdkProvider/context/ChatStateContext.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { IMessage, FileItem, UploadRequestFn, ChatStrategies } from \"@/types\";\nimport type { ChatConfig } from \"@/services/api\";\n\n/**\n * 聊天状态 Context\n * 只包含状态数据,不包含操作方法\n * 这样可以避免不必要的 rerender\n */\nexport interface ChatStateContextType {\n /** 请求地址 */\n url: string;\n /** 会话令牌 */\n token: string;\n /** 消息列表 */\n messages: IMessage[];\n /** 加载状态 */\n loading: boolean;\n /** 当前会话 ID */\n currentSessionId: string;\n /** 开场白 */\n prologue: string;\n /** 建议问题列表 */\n suggestions: string[];\n /** 应用配置信息 */\n appInfo: ChatConfig | null;\n /** 是否已初始化 */\n initialized: boolean;\n /** 是否展示点赞/点踩 */\n showFeedback: boolean;\n /** 是否启用用户消息 hover 操作栏 */\n showUserActions: boolean;\n /** 点击附件回调 */\n onFileClick?: (file: FileItem) => void;\n // 确认工具执行回调 */\n onConfirm?: () => void;\n /** 自定义上传函数 */\n uploadRequest?: UploadRequestFn;\n /** 当前 Provider 生效的聊天策略 */\n strategies: ChatStrategies;\n}\n\nexport const ChatStateContext = createContext<ChatStateContextType | null>(\n null,\n);\n\n/**\n * 使用聊天状态 Hook\n * @returns ChatStateContextType\n * @throws Error 如果在 XAdkProvider 外部使用\n */\nexport const useChatState = () => {\n const context = useContext(ChatStateContext);\n if (!context) {\n throw new Error(\"useChatState must be used within XAdkProvider\");\n }\n return context;\n};\n"],"mappings":"AAAA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;;AAIjD;AACA;AACA;AACA;AACA;;AAkCA,OAAO,IAAMC,gBAAgB,gBAAGF,aAAa,CAC3C,IACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMG,YAAY,GAAG,SAAfA,YAAYA,CAAA,EAAS;EAChC,IAAMC,OAAO,GAAGH,UAAU,CAACC,gBAAgB,CAAC;EAC5C,IAAI,CAACE,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CAAC,+CAA+C,CAAC;EAClE;EACA,OAAOD,OAAO;AAChB,CAAC"}
@@ -62,7 +62,7 @@ import { mergeChatStrategies, resolvePresetUploadRequest } from "../../presets/r
62
62
  * </XAdkProvider>
63
63
  */
64
64
  var XAdkProviderComponent = /*#__PURE__*/forwardRef(function (_ref, ref) {
65
- var _config$showFeedback, _config$allowUpload, _config$draggable, _config$uploadRequest;
65
+ var _config$showFeedback, _config$showUserActio, _config$allowUpload, _config$draggable, _config$uploadRequest;
66
66
  var _ref$url = _ref.url,
67
67
  url = _ref$url === void 0 ? window.location.origin : _ref$url,
68
68
  token = _ref.token,
@@ -133,6 +133,7 @@ var XAdkProviderComponent = /*#__PURE__*/forwardRef(function (_ref, ref) {
133
133
  _data$setStateDelta = data.setStateDelta,
134
134
  setStateDelta = _data$setStateDelta === void 0 ? function () {} : _data$setStateDelta;
135
135
  var showFeedback = (_config$showFeedback = config === null || config === void 0 ? void 0 : config.showFeedback) !== null && _config$showFeedback !== void 0 ? _config$showFeedback : true;
136
+ var showUserActions = (_config$showUserActio = config === null || config === void 0 ? void 0 : config.showUserActions) !== null && _config$showUserActio !== void 0 ? _config$showUserActio : true;
136
137
  var onFileClick = config === null || config === void 0 ? void 0 : config.onFileClick;
137
138
  var allowUpload = (_config$allowUpload = config === null || config === void 0 ? void 0 : config.allowUpload) !== null && _config$allowUpload !== void 0 ? _config$allowUpload : false;
138
139
  var draggable = (_config$draggable = config === null || config === void 0 ? void 0 : config.draggable) !== null && _config$draggable !== void 0 ? _config$draggable : true;
@@ -183,11 +184,12 @@ var XAdkProviderComponent = /*#__PURE__*/forwardRef(function (_ref, ref) {
183
184
  url: url,
184
185
  token: token,
185
186
  showFeedback: showFeedback,
187
+ showUserActions: showUserActions,
186
188
  onFileClick: onFileClick,
187
189
  uploadRequest: uploadRequest,
188
190
  strategies: mergedStrategies
189
191
  };
190
- }, [messages, loading, currentSessionId, prologue, suggestions, appInfo, initialized, url, token, showFeedback, onFileClick, uploadRequest, mergedStrategies]);
192
+ }, [messages, loading, currentSessionId, prologue, suggestions, appInfo, initialized, url, token, showFeedback, showUserActions, onFileClick, uploadRequest, mergedStrategies]);
191
193
 
192
194
  // 动作 Context Value - 函数引用稳定,不需要每次都创建新对象
193
195
  var chatActionValue = useMemo(function () {
@@ -1 +1 @@
1
- {"version":3,"names":["React","forwardRef","useImperativeHandle","useMemo","useState","ConfigProvider","XProvider","ChatStateContext","ChatActionContext","SessionContext","ChatSenderStateContext","useADKChat","primaryBlue","cssVarStyle","mergeChatStrategies","resolvePresetUploadRequest","XAdkProviderComponent","_ref","ref","_config$showFeedback","_config$allowUpload","_config$draggable","_config$uploadRequest","_ref$url","url","window","location","origin","token","config","preset","strategies","chatData","_ref$providerId","providerId","onSuccess","onError","onMessage","onStream","children","mergedStrategies","_objectSpread","internalData","enabled","data","appInfo","startChat","stopChat","reChat","clearChat","suggestChat","confirmFnCall","deleteSession","updateSession","currentSessionId","sessionPagination","sessionList","messages","loading","prologue","suggestions","initialized","setCurrentSession","setMessages","_data$likeMessage","likeMessage","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","prev","next","abrupt","stop","_data$setStateDelta","setStateDelta","showFeedback","onFileClick","allowUpload","draggable","presetUploadRequest","appNo","uploadRequest","getAppInfo","getMessages","getSessions","chatStateValue","chatActionValue","chat","sessionValue","_useState","_useState2","_slicedToArray","senderValue","setSenderValue","senderStateValue","_jsx","theme","colorPrimary","appTheme","Provider","value","style","display","height","width","position","displayName","Header","Sidebar","Messages","Sender","Chatbot","Welcome","DefaultLayout","jsx","XAdkProvider"],"sources":["../../../../src/components/XAdkProvider/index.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useImperativeHandle,\n useMemo,\n useState,\n} from \"react\";\nimport { ConfigProvider } from \"antd\";\nimport { XProvider } from \"@ant-design/x\";\nimport { ChatStateContext } from \"./context/ChatStateContext\";\nimport { ChatActionContext } from \"./context/ChatActionContext\";\nimport { SessionContext } from \"./context/SessionContext\";\nimport { ChatSenderStateContext } from \"./context/ChatSenderStateContext\";\nimport useADKChat from \"@/hooks/useADKChat\";\nimport { primaryBlue } from \"@/styles/common\";\nimport { cssVarStyle } from \"@/styles/tokens\";\nimport type {\n XAdkProviderProps,\n XAdkProviderHandle,\n XAdkProviderConfig,\n} from \"@/types/XAdkProvider\";\nimport type { ChatHookResult } from \"@/types/ChatHook\";\nimport {\n mergeChatStrategies,\n resolvePresetUploadRequest,\n} from \"@/presets/runtime\";\n\n/**\n * XAdkProvider Props (扩展版)\n *\n * 支持两种使用方式:\n * 1. 标准协议: 提供 url/token/config,使用内置 useADKChat\n * 2. 自定义协议: 提供 chatData,使用自己的 Hook\n */\nexport interface XAdkProviderPropsExtended extends Omit<\n XAdkProviderProps,\n \"url\" | \"token\" | \"config\"\n> {\n /**\n * 选项 A: 使用标准协议 (内置 useADKChat)\n */\n url?: string;\n token: string;\n config?: XAdkProviderConfig;\n\n /**\n * 选项 B: 使用自定义 Hook 数据\n * 如果提供此参数,将忽略 url/token/config\n *\n * @example\n * // GraphQL 协议\n * const chatData = useMyGraphQLChat({ endpoint: '...' });\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n *\n * @example\n * // WebSocket 协议\n * const chatData = useWebSocketChat({ url: 'ws://...' });\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n */\n chatData?: ChatHookResult;\n\n children: React.ReactNode;\n}\n\n/**\n * XAdkProvider - AI 聊天 SDK 核心 Provider\n *\n * 采用 Compound Components 架构:\n * - 只负责数据和状态管理\n * - 不包含 UI 布局\n * - 通过 Context 向子组件提供数据\n * - 支持完全自定义的组件组合\n * - 支持协议解耦,可使用自定义 Hook\n *\n * @example\n * // 基础用法 - 标准协议\n * <XAdkProvider url=\"...\" token=\"...\" config={...}>\n * <XAdkProvider.Chatbot />\n * </XAdkProvider>\n *\n * @example\n * // 自定义协议 - GraphQL\n * function App() {\n * const chatData = useMyGraphQLChat({ endpoint: '...' });\n * return (\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n * );\n * }\n *\n * @example\n * // 自定义布局\n * <XAdkProvider url=\"...\" token=\"...\">\n * <div style={{ display: 'flex' }}>\n * <XAdkProvider.Sidebar />\n * <div>\n * <XAdkProvider.Messages />\n * <XAdkProvider.Sender />\n * </div>\n * </div>\n * </XAdkProvider>\n */\nconst XAdkProviderComponent = forwardRef<\n XAdkProviderHandle,\n XAdkProviderPropsExtended\n>(\n (\n {\n url = window.location.origin,\n token,\n config,\n preset,\n strategies,\n chatData, // 自定义 Hook 数据\n providerId = \"defaultId\",\n onSuccess,\n onError,\n onMessage,\n onStream,\n children,\n },\n ref,\n ) => {\n const mergedStrategies = useMemo(\n () =>\n mergeChatStrategies(preset ?? config?.preset, {\n ...config?.strategies,\n ...strategies,\n }),\n [preset, strategies, config?.preset, config?.strategies],\n );\n\n // 内置 Hook 数据 (仅在没有提供 chatData 时调用)\n const internalData = useADKChat({\n url,\n token: token || \"\",\n config: config || {},\n strategies: mergedStrategies,\n onError,\n onSuccess,\n onMessage,\n onStream,\n // 仅在提供了 url 和 token 时才初始化\n enabled: !chatData && !!url && !!token,\n });\n\n // 使用外部数据或内部数据\n const data = chatData || internalData;\n\n // 解构数据\n const {\n appInfo,\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n confirmFnCall,\n deleteSession,\n updateSession,\n currentSessionId,\n sessionPagination,\n sessionList,\n messages,\n loading,\n prologue,\n suggestions,\n initialized,\n setCurrentSession,\n setMessages,\n likeMessage = async () => false,\n setStateDelta = () => {},\n } = data;\n\n const showFeedback = config?.showFeedback ?? true;\n const onFileClick = config?.onFileClick;\n const allowUpload = config?.allowUpload ?? false;\n const draggable = config?.draggable ?? true;\n const presetUploadRequest = useMemo(\n () =>\n resolvePresetUploadRequest(preset ?? config?.preset, {\n url,\n token,\n appNo: config?.appNo,\n }),\n [preset, config?.preset, url, token, config?.appNo],\n );\n const uploadRequest = config?.uploadRequest ?? presetUploadRequest;\n\n // 暴露 API 给 ref\n useImperativeHandle(\n ref,\n () => ({\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n deleteSession,\n updateSession,\n getAppInfo: () => appInfo,\n getMessages: () => messages,\n getSessions: () => sessionList,\n setMessages,\n setCurrentSession,\n setStateDelta,\n }),\n [\n appInfo,\n messages,\n sessionList,\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n deleteSession,\n updateSession,\n setMessages,\n setCurrentSession,\n setStateDelta,\n ],\n );\n\n // 状态 Context Value - 使用 useMemo 避免不必要的 rerender\n const chatStateValue = useMemo(\n () => ({\n messages,\n loading,\n currentSessionId,\n prologue,\n suggestions,\n appInfo,\n initialized,\n url,\n token,\n showFeedback,\n onFileClick,\n uploadRequest,\n strategies: mergedStrategies,\n }),\n [\n messages,\n loading,\n currentSessionId,\n prologue,\n suggestions,\n appInfo,\n initialized,\n url,\n token,\n showFeedback,\n onFileClick,\n uploadRequest,\n mergedStrategies,\n ],\n );\n\n // 动作 Context Value - 函数引用稳定,不需要每次都创建新对象\n const chatActionValue = useMemo(\n () => ({\n chat: startChat,\n stopChat,\n clearChat,\n reChat,\n suggestChat,\n confirmFnCall,\n setMessages,\n likeMessage,\n setStateDelta,\n }),\n [\n startChat,\n stopChat,\n clearChat,\n reChat,\n suggestChat,\n confirmFnCall,\n setMessages,\n likeMessage,\n setStateDelta,\n ],\n );\n\n // 会话 Context Value\n const sessionValue = useMemo(\n () => ({\n sessionList,\n sessionPagination,\n deleteSession,\n updateSession,\n setCurrentSession,\n }),\n [\n sessionList,\n sessionPagination,\n deleteSession,\n updateSession,\n setCurrentSession,\n ],\n );\n\n // Sender 输入框受控状态\n const [senderValue, setSenderValue] = useState(\"\");\n\n // Sender 专用状态 — 不包含 messages,避免轮询更新消息时导致 Sender 重渲染和焦点丢失\n const senderStateValue = useMemo(\n () => ({\n loading,\n uploadRequest,\n allowUpload,\n draggable,\n senderValue,\n setSenderValue,\n }),\n [loading, uploadRequest, allowUpload, draggable, senderValue],\n );\n\n return (\n <ConfigProvider\n theme={{\n token: {\n colorPrimary: appInfo?.appTheme || primaryBlue,\n },\n }}\n >\n <XProvider>\n <ChatStateContext.Provider value={chatStateValue}>\n <ChatActionContext.Provider value={chatActionValue}>\n <SessionContext.Provider value={sessionValue}>\n <ChatSenderStateContext.Provider value={senderStateValue}>\n <div\n style={\n {\n ...cssVarStyle,\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n position: \"relative\",\n } as React.CSSProperties\n }\n >\n {children}\n </div>\n </ChatSenderStateContext.Provider>\n </SessionContext.Provider>\n </ChatActionContext.Provider>\n </ChatStateContext.Provider>\n </XProvider>\n </ConfigProvider>\n );\n },\n);\n\nXAdkProviderComponent.displayName = \"XAdkProvider\";\n\n// 导入 Compound Components\nimport Header from \"./compound/Header\";\nimport Sidebar from \"./compound/Sidebar\";\nimport Messages from \"./compound/Messages\";\nimport Sender from \"./compound/Sender\";\nimport Chatbot from \"./compound/Chatbot\";\nimport Welcome from \"./compound/Welcome\";\nimport DefaultLayout from \"./compound/DefaultLayout\";\n\n// 导出时会挂载 Compound Components\nconst XAdkProvider = XAdkProviderComponent as typeof XAdkProviderComponent & {\n Header: typeof Header;\n Sidebar: typeof Sidebar;\n Messages: typeof Messages;\n Sender: typeof Sender;\n Chatbot: typeof Chatbot;\n Welcome: typeof Welcome;\n DefaultLayout: typeof DefaultLayout;\n};\n\n// 挂载 Compound Components\nXAdkProvider.Header = Header;\nXAdkProvider.Sidebar = Sidebar;\nXAdkProvider.Messages = Messages;\nXAdkProvider.Sender = Sender;\nXAdkProvider.Chatbot = Chatbot;\nXAdkProvider.DefaultLayout = DefaultLayout;\nXAdkProvider.Welcome = Welcome;\n\nexport default XAdkProvider;\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","forwardRef","useImperativeHandle","useMemo","useState","ConfigProvider","XProvider","ChatStateContext","ChatActionContext","SessionContext","ChatSenderStateContext","useADKChat","primaryBlue","cssVarStyle","mergeChatStrategies","resolvePresetUploadRequest","XAdkProviderComponent","_ref","ref","_config$showFeedback","_config$showUserActio","_config$allowUpload","_config$draggable","_config$uploadRequest","_ref$url","url","window","location","origin","token","config","preset","strategies","chatData","_ref$providerId","providerId","onSuccess","onError","onMessage","onStream","children","mergedStrategies","_objectSpread","internalData","enabled","data","appInfo","startChat","stopChat","reChat","clearChat","suggestChat","confirmFnCall","deleteSession","updateSession","currentSessionId","sessionPagination","sessionList","messages","loading","prologue","suggestions","initialized","setCurrentSession","setMessages","_data$likeMessage","likeMessage","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","prev","next","abrupt","stop","_data$setStateDelta","setStateDelta","showFeedback","showUserActions","onFileClick","allowUpload","draggable","presetUploadRequest","appNo","uploadRequest","getAppInfo","getMessages","getSessions","chatStateValue","chatActionValue","chat","sessionValue","_useState","_useState2","_slicedToArray","senderValue","setSenderValue","senderStateValue","_jsx","theme","colorPrimary","appTheme","Provider","value","style","display","height","width","position","displayName","Header","Sidebar","Messages","Sender","Chatbot","Welcome","DefaultLayout","jsx","XAdkProvider"],"sources":["../../../../src/components/XAdkProvider/index.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useImperativeHandle,\n useMemo,\n useState,\n} from \"react\";\nimport { ConfigProvider } from \"antd\";\nimport { XProvider } from \"@ant-design/x\";\nimport { ChatStateContext } from \"./context/ChatStateContext\";\nimport { ChatActionContext } from \"./context/ChatActionContext\";\nimport { SessionContext } from \"./context/SessionContext\";\nimport { ChatSenderStateContext } from \"./context/ChatSenderStateContext\";\nimport useADKChat from \"@/hooks/useADKChat\";\nimport { primaryBlue } from \"@/styles/common\";\nimport { cssVarStyle } from \"@/styles/tokens\";\nimport type {\n XAdkProviderProps,\n XAdkProviderHandle,\n XAdkProviderConfig,\n} from \"@/types/XAdkProvider\";\nimport type { ChatHookResult } from \"@/types/ChatHook\";\nimport {\n mergeChatStrategies,\n resolvePresetUploadRequest,\n} from \"@/presets/runtime\";\n\n/**\n * XAdkProvider Props (扩展版)\n *\n * 支持两种使用方式:\n * 1. 标准协议: 提供 url/token/config,使用内置 useADKChat\n * 2. 自定义协议: 提供 chatData,使用自己的 Hook\n */\nexport interface XAdkProviderPropsExtended extends Omit<\n XAdkProviderProps,\n \"url\" | \"token\" | \"config\"\n> {\n /**\n * 选项 A: 使用标准协议 (内置 useADKChat)\n */\n url?: string;\n token: string;\n config?: XAdkProviderConfig;\n\n /**\n * 选项 B: 使用自定义 Hook 数据\n * 如果提供此参数,将忽略 url/token/config\n *\n * @example\n * // GraphQL 协议\n * const chatData = useMyGraphQLChat({ endpoint: '...' });\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n *\n * @example\n * // WebSocket 协议\n * const chatData = useWebSocketChat({ url: 'ws://...' });\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n */\n chatData?: ChatHookResult;\n\n children: React.ReactNode;\n}\n\n/**\n * XAdkProvider - AI 聊天 SDK 核心 Provider\n *\n * 采用 Compound Components 架构:\n * - 只负责数据和状态管理\n * - 不包含 UI 布局\n * - 通过 Context 向子组件提供数据\n * - 支持完全自定义的组件组合\n * - 支持协议解耦,可使用自定义 Hook\n *\n * @example\n * // 基础用法 - 标准协议\n * <XAdkProvider url=\"...\" token=\"...\" config={...}>\n * <XAdkProvider.Chatbot />\n * </XAdkProvider>\n *\n * @example\n * // 自定义协议 - GraphQL\n * function App() {\n * const chatData = useMyGraphQLChat({ endpoint: '...' });\n * return (\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n * );\n * }\n *\n * @example\n * // 自定义布局\n * <XAdkProvider url=\"...\" token=\"...\">\n * <div style={{ display: 'flex' }}>\n * <XAdkProvider.Sidebar />\n * <div>\n * <XAdkProvider.Messages />\n * <XAdkProvider.Sender />\n * </div>\n * </div>\n * </XAdkProvider>\n */\nconst XAdkProviderComponent = forwardRef<\n XAdkProviderHandle,\n XAdkProviderPropsExtended\n>(\n (\n {\n url = window.location.origin,\n token,\n config,\n preset,\n strategies,\n chatData, // 自定义 Hook 数据\n providerId = \"defaultId\",\n onSuccess,\n onError,\n onMessage,\n onStream,\n children,\n },\n ref,\n ) => {\n const mergedStrategies = useMemo(\n () =>\n mergeChatStrategies(preset ?? config?.preset, {\n ...config?.strategies,\n ...strategies,\n }),\n [preset, strategies, config?.preset, config?.strategies],\n );\n\n // 内置 Hook 数据 (仅在没有提供 chatData 时调用)\n const internalData = useADKChat({\n url,\n token: token || \"\",\n config: config || {},\n strategies: mergedStrategies,\n onError,\n onSuccess,\n onMessage,\n onStream,\n // 仅在提供了 url 和 token 时才初始化\n enabled: !chatData && !!url && !!token,\n });\n\n // 使用外部数据或内部数据\n const data = chatData || internalData;\n\n // 解构数据\n const {\n appInfo,\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n confirmFnCall,\n deleteSession,\n updateSession,\n currentSessionId,\n sessionPagination,\n sessionList,\n messages,\n loading,\n prologue,\n suggestions,\n initialized,\n setCurrentSession,\n setMessages,\n likeMessage = async () => false,\n setStateDelta = () => {},\n } = data;\n\n const showFeedback = config?.showFeedback ?? true;\n const showUserActions = config?.showUserActions ?? true;\n const onFileClick = config?.onFileClick;\n const allowUpload = config?.allowUpload ?? false;\n const draggable = config?.draggable ?? true;\n const presetUploadRequest = useMemo(\n () =>\n resolvePresetUploadRequest(preset ?? config?.preset, {\n url,\n token,\n appNo: config?.appNo,\n }),\n [preset, config?.preset, url, token, config?.appNo],\n );\n const uploadRequest = config?.uploadRequest ?? presetUploadRequest;\n\n // 暴露 API 给 ref\n useImperativeHandle(\n ref,\n () => ({\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n deleteSession,\n updateSession,\n getAppInfo: () => appInfo,\n getMessages: () => messages,\n getSessions: () => sessionList,\n setMessages,\n setCurrentSession,\n setStateDelta,\n }),\n [\n appInfo,\n messages,\n sessionList,\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n deleteSession,\n updateSession,\n setMessages,\n setCurrentSession,\n setStateDelta,\n ],\n );\n\n // 状态 Context Value - 使用 useMemo 避免不必要的 rerender\n const chatStateValue = useMemo(\n () => ({\n messages,\n loading,\n currentSessionId,\n prologue,\n suggestions,\n appInfo,\n initialized,\n url,\n token,\n showFeedback,\n showUserActions,\n onFileClick,\n uploadRequest,\n strategies: mergedStrategies,\n }),\n [\n messages,\n loading,\n currentSessionId,\n prologue,\n suggestions,\n appInfo,\n initialized,\n url,\n token,\n showFeedback,\n showUserActions,\n onFileClick,\n uploadRequest,\n mergedStrategies,\n ],\n );\n\n // 动作 Context Value - 函数引用稳定,不需要每次都创建新对象\n const chatActionValue = useMemo(\n () => ({\n chat: startChat,\n stopChat,\n clearChat,\n reChat,\n suggestChat,\n confirmFnCall,\n setMessages,\n likeMessage,\n setStateDelta,\n }),\n [\n startChat,\n stopChat,\n clearChat,\n reChat,\n suggestChat,\n confirmFnCall,\n setMessages,\n likeMessage,\n setStateDelta,\n ],\n );\n\n // 会话 Context Value\n const sessionValue = useMemo(\n () => ({\n sessionList,\n sessionPagination,\n deleteSession,\n updateSession,\n setCurrentSession,\n }),\n [\n sessionList,\n sessionPagination,\n deleteSession,\n updateSession,\n setCurrentSession,\n ],\n );\n\n // Sender 输入框受控状态\n const [senderValue, setSenderValue] = useState(\"\");\n\n // Sender 专用状态 — 不包含 messages,避免轮询更新消息时导致 Sender 重渲染和焦点丢失\n const senderStateValue = useMemo(\n () => ({\n loading,\n uploadRequest,\n allowUpload,\n draggable,\n senderValue,\n setSenderValue,\n }),\n [loading, uploadRequest, allowUpload, draggable, senderValue],\n );\n\n return (\n <ConfigProvider\n theme={{\n token: {\n colorPrimary: appInfo?.appTheme || primaryBlue,\n },\n }}\n >\n <XProvider>\n <ChatStateContext.Provider value={chatStateValue}>\n <ChatActionContext.Provider value={chatActionValue}>\n <SessionContext.Provider value={sessionValue}>\n <ChatSenderStateContext.Provider value={senderStateValue}>\n <div\n style={\n {\n ...cssVarStyle,\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n position: \"relative\",\n } as React.CSSProperties\n }\n >\n {children}\n </div>\n </ChatSenderStateContext.Provider>\n </SessionContext.Provider>\n </ChatActionContext.Provider>\n </ChatStateContext.Provider>\n </XProvider>\n </ConfigProvider>\n );\n },\n);\n\nXAdkProviderComponent.displayName = \"XAdkProvider\";\n\n// 导入 Compound Components\nimport Header from \"./compound/Header\";\nimport Sidebar from \"./compound/Sidebar\";\nimport Messages from \"./compound/Messages\";\nimport Sender from \"./compound/Sender\";\nimport Chatbot from \"./compound/Chatbot\";\nimport Welcome from \"./compound/Welcome\";\nimport DefaultLayout from \"./compound/DefaultLayout\";\n\n// 导出时会挂载 Compound Components\nconst XAdkProvider = XAdkProviderComponent as typeof XAdkProviderComponent & {\n Header: typeof Header;\n Sidebar: typeof Sidebar;\n Messages: typeof Messages;\n Sender: typeof Sender;\n Chatbot: typeof Chatbot;\n Welcome: typeof Welcome;\n DefaultLayout: typeof DefaultLayout;\n};\n\n// 挂载 Compound Components\nXAdkProvider.Header = Header;\nXAdkProvider.Sidebar = Sidebar;\nXAdkProvider.Messages = Messages;\nXAdkProvider.Sender = Sender;\nXAdkProvider.Chatbot = Chatbot;\nXAdkProvider.DefaultLayout = DefaultLayout;\nXAdkProvider.Welcome = Welcome;\n\nexport default XAdkProvider;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":["React","Tag","CloseOutlined","useStyles","jsx","_jsx","InputTags","_ref","mentions","onRemove","styles","length","className","inputTags","children","map","mention","inputTag","closable","onClose","e","preventDefault","id","closeIcon","style","fontSize","color","icon","displayName","label"],"sources":["../../../../src/components/XAdkSender/InputTags.tsx"],"sourcesContent":["import React from \"react\";\nimport { Tag } from \"antd\";\nimport { CloseOutlined } from \"@ant-design/icons\";\nimport type { MentionTag } from \"@/types\";\nimport { useStyles } from \"./styles\";\n\nexport interface InputTagsProps {\n mentions: MentionTag[];\n onRemove: (id: string) => void;\n}\n\n// 输入框上方展示\nconst InputTags: React.FC<InputTagsProps> = ({ mentions, onRemove }) => {\n const styles = useStyles();\n\n if (!mentions.length) return null;\n\n // 非 inlineTags 模式下,Mention 以独立区域展示;inlineTags 模式由 InlineTagInput 接管混排和删除。\n return (\n <div className={styles.inputTags}>\n {mentions.map((mention) => (\n <Tag\n key={mention.id}\n className={styles.inputTag}\n closable\n onClose={(e) => {\n e.preventDefault();\n onRemove(mention.id);\n }}\n closeIcon={<CloseOutlined style={{ fontSize: 10 }} />}\n color={mention.color}\n icon={mention.icon}\n >\n {mention.displayName || mention.label}\n </Tag>\n ))}\n </div>\n );\n};\n\nexport default InputTags;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,GAAG,QAAQ,MAAM;AAC1B,SAASC,aAAa,QAAQ,mBAAmB;AAEjD,SAASC,SAAS;AAAmB,SAAAC,GAAA,IAAAC,IAAA;AAOrC;AACA,IAAMC,SAAmC,GAAG,SAAtCA,SAAmCA,CAAAC,IAAA,EAA+B;EAAA,IAAzBC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IAAEC,QAAQ,GAAAF,IAAA,CAARE,QAAQ;EAC/D,IAAMC,MAAM,GAAGP,SAAS,CAAC,CAAC;EAE1B,IAAI,CAACK,QAAQ,CAACG,MAAM,EAAE,OAAO,IAAI;;EAEjC;EACA,oBACEN,IAAA;IAAKO,SAAS,EAAEF,MAAM,CAACG,SAAU;IAAAC,QAAA,EAC9BN,QAAQ,CAACO,GAAG,CAAC,UAACC,OAAO;MAAA,oBACpBX,IAAA,CAACJ,GAAG;QAEFW,SAAS,EAAEF,MAAM,CAACO,QAAS;QAC3BC,QAAQ;QACRC,OAAO,EAAE,SAAAA,QAACC,CAAC,EAAK;UACdA,CAAC,CAACC,cAAc,CAAC,CAAC;UAClBZ,QAAQ,CAACO,OAAO,CAACM,EAAE,CAAC;QACtB,CAAE;QACFC,SAAS,eAAElB,IAAA,CAACH,aAAa;UAACsB,KAAK,EAAE;YAAEC,QAAQ,EAAE;UAAG;QAAE,CAAE,CAAE;QACtDC,KAAK,EAAEV,OAAO,CAACU,KAAM;QACrBC,IAAI,EAAEX,OAAO,CAACW,IAAK;QAAAb,QAAA,EAElBE,OAAO,CAACY,WAAW,IAAIZ,OAAO,CAACa;MAAK,GAXhCb,OAAO,CAACM,EAYV,CAAC;IAAA,CACP;EAAC,CACC,CAAC;AAEV,CAAC;AAED,eAAehB,SAAS"}
1
+ {"version":3,"names":["React","Tag","CloseOutlined","useStyles","jsx","_jsx","InputTags","_ref","mentions","onRemove","styles","length","className","inputTags","children","map","mention","inputTag","closable","onClose","e","preventDefault","id","closeIcon","style","fontSize","color","icon","displayName","label"],"sources":["../../../../src/components/XAdkSender/InputTags.tsx"],"sourcesContent":["import React from \"react\";\nimport { Tag } from \"antd\";\nimport { CloseOutlined } from \"@ant-design/icons\";\nimport type { MentionTag } from \"@/types\";\nimport { useStyles } from \"./styles\";\n\nexport interface InputTagsProps {\n mentions: MentionTag[];\n onRemove: (id: string) => void;\n}\n\n// 输入框上方展示\nconst InputTags: React.FC<InputTagsProps> = ({ mentions, onRemove }) => {\n const styles = useStyles();\n\n if (!mentions.length) return null;\n\n // 非 inlineTags 模式下,Mention 以独立区域展示;inlineTags 模式由 InlineTagInput 接管混排和删除。\n return (\n <div className={styles.inputTags}>\n {mentions.map((mention) => (\n <Tag\n key={mention.id}\n className={styles.inputTag}\n closable\n onClose={(e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n onRemove(mention.id);\n }}\n closeIcon={<CloseOutlined style={{ fontSize: 10 }} />}\n color={mention.color}\n icon={mention.icon}\n >\n {mention.displayName || mention.label}\n </Tag>\n ))}\n </div>\n );\n};\n\nexport default InputTags;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,GAAG,QAAQ,MAAM;AAC1B,SAASC,aAAa,QAAQ,mBAAmB;AAEjD,SAASC,SAAS;AAAmB,SAAAC,GAAA,IAAAC,IAAA;AAOrC;AACA,IAAMC,SAAmC,GAAG,SAAtCA,SAAmCA,CAAAC,IAAA,EAA+B;EAAA,IAAzBC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IAAEC,QAAQ,GAAAF,IAAA,CAARE,QAAQ;EAC/D,IAAMC,MAAM,GAAGP,SAAS,CAAC,CAAC;EAE1B,IAAI,CAACK,QAAQ,CAACG,MAAM,EAAE,OAAO,IAAI;;EAEjC;EACA,oBACEN,IAAA;IAAKO,SAAS,EAAEF,MAAM,CAACG,SAAU;IAAAC,QAAA,EAC9BN,QAAQ,CAACO,GAAG,CAAC,UAACC,OAAO;MAAA,oBACpBX,IAAA,CAACJ,GAAG;QAEFW,SAAS,EAAEF,MAAM,CAACO,QAAS;QAC3BC,QAAQ;QACRC,OAAO,EAAE,SAAAA,QAACC,CAAgC,EAAK;UAC7CA,CAAC,CAACC,cAAc,CAAC,CAAC;UAClBZ,QAAQ,CAACO,OAAO,CAACM,EAAE,CAAC;QACtB,CAAE;QACFC,SAAS,eAAElB,IAAA,CAACH,aAAa;UAACsB,KAAK,EAAE;YAAEC,QAAQ,EAAE;UAAG;QAAE,CAAE,CAAE;QACtDC,KAAK,EAAEV,OAAO,CAACU,KAAM;QACrBC,IAAI,EAAEX,OAAO,CAACW,IAAK;QAAAb,QAAA,EAElBE,OAAO,CAACY,WAAW,IAAIZ,OAAO,CAACa;MAAK,GAXhCb,OAAO,CAACM,EAYV,CAAC;IAAA,CACP;EAAC,CACC,CAAC;AAEV,CAAC;AAED,eAAehB,SAAS"}
@@ -1,6 +1,6 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
- import React, { useState, useEffect } from "react";
3
- import { CheckCircleFilled, CloseCircleFilled, ClockCircleOutlined, SyncOutlined, ThunderboltOutlined, PartitionOutlined, RightOutlined, DownOutlined } from "@ant-design/icons";
2
+ import React, { useState, useEffect, useRef } from "react";
3
+ import { ThunderboltOutlined, PartitionOutlined, RightOutlined, DownOutlined } from "@ant-design/icons";
4
4
  import MarkdownRender from "../XAdkChatbot/components/MarkdownRender";
5
5
  import FunctionCallRender from "../XAdkChatbot/components/FunctionCallRender";
6
6
  import { useStyles } from "./styles";
@@ -92,7 +92,7 @@ var TimelineToolItem = function TimelineToolItem(_ref3) {
92
92
  children: toolName
93
93
  }), isDone && /*#__PURE__*/_jsx("span", {
94
94
  className: styles.toolStatusTag,
95
- children: "\u6267\u884C\u6210\u529F"
95
+ children: "\u5DF2\u5B8C\u6210"
96
96
  })]
97
97
  });
98
98
  return /*#__PURE__*/_jsxs(TimelineItem, {
@@ -117,58 +117,29 @@ var TimelineToolItem = function TimelineToolItem(_ref3) {
117
117
  })]
118
118
  });
119
119
  };
120
- var StatusIcon = function StatusIcon(_ref4) {
121
- var status = _ref4.status;
122
- switch (status) {
123
- case "loading":
124
- return /*#__PURE__*/_jsx(SyncOutlined, {
125
- spin: true,
126
- style: {
127
- color: "#1677ff"
128
- }
129
- });
130
- case "success":
131
- return /*#__PURE__*/_jsx(CheckCircleFilled, {
132
- style: {
133
- color: "#52c41a"
134
- }
135
- });
136
- case "error":
137
- return /*#__PURE__*/_jsx(CloseCircleFilled, {
138
- style: {
139
- color: "#ff4d4f"
140
- }
141
- });
142
- case "pending":
143
- return /*#__PURE__*/_jsx(ClockCircleOutlined, {
144
- style: {
145
- color: "#8c8c8c"
146
- }
147
- });
148
- }
149
- };
150
- var XAdkThoughtChain = function XAdkThoughtChain(_ref5) {
151
- var _ref5$collapsible = _ref5.collapsible,
152
- showCollapsibleHeader = _ref5$collapsible === void 0 ? false : _ref5$collapsible,
153
- status = _ref5.status,
154
- className = _ref5.className,
155
- style = _ref5.style,
156
- _ref5$defaultOpen = _ref5.defaultOpen,
157
- defaultOpen = _ref5$defaultOpen === void 0 ? false : _ref5$defaultOpen,
158
- _ref5$showFnCallDetai = _ref5.showFnCallDetail,
159
- showFnCallDetail = _ref5$showFnCallDetai === void 0 ? false : _ref5$showFnCallDetai,
160
- _ref5$title = _ref5.title,
161
- title = _ref5$title === void 0 ? "思维链已完成" : _ref5$title,
162
- _ref5$items = _ref5.items,
163
- items = _ref5$items === void 0 ? [] : _ref5$items,
164
- loading = _ref5.loading,
165
- _ref5$blink = _ref5.blink,
166
- blink = _ref5$blink === void 0 ? false : _ref5$blink,
167
- onConfirm = _ref5.onConfirm,
168
- renderFunctionCall = _ref5.renderFunctionCall,
169
- _ref5$toolKindResolve = _ref5.toolKindResolver,
170
- toolKindResolver = _ref5$toolKindResolve === void 0 ? defaultToolKindResolver : _ref5$toolKindResolve,
171
- strategies = _ref5.strategies;
120
+ var XAdkThoughtChain = function XAdkThoughtChain(_ref4) {
121
+ var _ref4$collapsible = _ref4.collapsible,
122
+ showCollapsibleHeader = _ref4$collapsible === void 0 ? false : _ref4$collapsible,
123
+ status = _ref4.status,
124
+ className = _ref4.className,
125
+ style = _ref4.style,
126
+ _ref4$defaultOpen = _ref4.defaultOpen,
127
+ defaultOpen = _ref4$defaultOpen === void 0 ? false : _ref4$defaultOpen,
128
+ _ref4$showFnCallDetai = _ref4.showFnCallDetail,
129
+ showFnCallDetail = _ref4$showFnCallDetai === void 0 ? false : _ref4$showFnCallDetai,
130
+ _ref4$title = _ref4.title,
131
+ title = _ref4$title === void 0 ? "思维链已完成" : _ref4$title,
132
+ activeStep = _ref4.activeStep,
133
+ _ref4$items = _ref4.items,
134
+ items = _ref4$items === void 0 ? [] : _ref4$items,
135
+ loading = _ref4.loading,
136
+ _ref4$blink = _ref4.blink,
137
+ blink = _ref4$blink === void 0 ? false : _ref4$blink,
138
+ onConfirm = _ref4.onConfirm,
139
+ renderFunctionCall = _ref4.renderFunctionCall,
140
+ _ref4$toolKindResolve = _ref4.toolKindResolver,
141
+ toolKindResolver = _ref4$toolKindResolve === void 0 ? defaultToolKindResolver : _ref4$toolKindResolve,
142
+ strategies = _ref4.strategies;
172
143
  var styles = useStyles();
173
144
 
174
145
  // status 优先,loading 向后兼容
@@ -178,12 +149,12 @@ var XAdkThoughtChain = function XAdkThoughtChain(_ref5) {
178
149
  _useState4 = _slicedToArray(_useState3, 2),
179
150
  isOpen = _useState4[0],
180
151
  setIsOpen = _useState4[1];
152
+ var wasLoading = useRef(isLoading);
181
153
  useEffect(function () {
182
- if (isLoading) Promise.resolve().then(function () {
183
- return setIsOpen(true);
184
- });
154
+ if (wasLoading.current && !isLoading) setIsOpen(false);
155
+ wasLoading.current = isLoading;
185
156
  }, [isLoading]);
186
- var shouldBlink = blink && isLoading;
157
+ var shouldBlink = blink && isLoading && !showCollapsibleHeader;
187
158
  var renderTimeline = function renderTimeline() {
188
159
  return /*#__PURE__*/_jsx("div", {
189
160
  className: styles.timeline,
@@ -217,30 +188,33 @@ var XAdkThoughtChain = function XAdkThoughtChain(_ref5) {
217
188
  });
218
189
  }
219
190
 
220
- // 显示可折叠 header
191
+ // 显示可折叠的执行过程入口
221
192
  return /*#__PURE__*/_jsxs("div", {
222
- className: "".concat(styles.thoughtChainBlock).concat(className ? " ".concat(className) : ""),
193
+ className: "".concat(styles.thoughtChainBlock, " ").concat(styles.groupedBlock).concat(className ? " ".concat(className) : ""),
223
194
  style: style,
224
- children: [/*#__PURE__*/_jsx("div", {
195
+ children: [/*#__PURE__*/_jsxs("button", {
196
+ type: "button",
225
197
  className: styles.thoughtHeader,
198
+ "aria-expanded": isOpen,
226
199
  onClick: function onClick() {
227
- return setIsOpen(!isOpen);
200
+ return setIsOpen(function (open) {
201
+ return !open;
202
+ });
228
203
  },
229
- children: /*#__PURE__*/_jsxs("div", {
230
- className: styles.headerLeft,
231
- children: [/*#__PURE__*/_jsx("div", {
232
- className: styles.statusIcon,
233
- children: /*#__PURE__*/_jsx(StatusIcon, {
234
- status: effectiveStatus
235
- })
236
- }), /*#__PURE__*/_jsx("span", {
237
- className: "".concat(styles.headerTitle).concat(shouldBlink ? " ".concat(styles.blink) : ""),
238
- children: isLoading ? "深度思考与执行中..." : title
239
- }), /*#__PURE__*/_jsx("div", {
240
- className: "".concat(styles.caret, " ").concat(isOpen ? "open" : ""),
241
- children: /*#__PURE__*/_jsx(RightOutlined, {})
242
- })]
243
- })
204
+ children: [/*#__PURE__*/_jsx("span", {
205
+ className: "".concat(styles.caret, " ").concat(isOpen ? "open" : ""),
206
+ "aria-hidden": "true",
207
+ children: /*#__PURE__*/_jsx(RightOutlined, {})
208
+ }), /*#__PURE__*/_jsx("span", {
209
+ className: styles.headerTitle,
210
+ children: isLoading ? "执行中" : title
211
+ }), isLoading && (activeStep === null || activeStep === void 0 ? void 0 : activeStep.trim()) && /*#__PURE__*/_jsx("span", {
212
+ className: styles.activeStep,
213
+ children: activeStep.trim()
214
+ }), /*#__PURE__*/_jsx("span", {
215
+ className: styles.headerAction,
216
+ children: isOpen ? "收起执行过程" : "查看执行过程"
217
+ })]
244
218
  }), isOpen && /*#__PURE__*/_jsx("div", {
245
219
  className: styles.thinkingBody,
246
220
  children: renderTimeline()