@topthink/chat 1.3.2 → 1.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/es/index.js CHANGED
@@ -1,4 +1,7 @@
1
- import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as n,css as i,formatSize as o,Tooltip as s,useAsync as a,isCancel as l,isRequestError as c,Form as d,Toast as u,InfiniteScroller as m,useDebounce as h,Offcanvas as p,ModalForm as g,RequestButton as f,Loader as b,useImmer as v,getAbsoluteUrl as y,Lightbox as x,Clipboard as w,Button as k,isImageUrl as E,request as N}from"@topthink/components";import*as j from"react";import{createContext as C,useContext as $,useRef as R,useCallback as S,useEffect as M,useState as q,forwardRef as F,useMemo as A,useImperativeHandle as z,Fragment as I,memo as L,Component as D}from"react";import*as P from"path";import T from"path";import{Spinner as O,Badge as B,Dropdown as U,FormControl as _,CloseButton as H,OverlayTrigger as Q,Popover as J}from"react-bootstrap";import K from"eventemitter3";import W from"react-textarea-autosize";import X from"lodash/isEqual";import{toString as V}from"hast-util-to-string";import Y from"react-markdown";import"katex/dist/katex.min.css";import G from"rehype-highlight";import Z from"rehype-katex";import ee from"remark-breaks";import te from"remark-gfm";import re from"remark-math";import{codes as ne,types as ie}from"micromark-util-symbol";import{markdownLineEnding as oe}from"micromark-util-character";import{createPortal as se}from"react-dom";import ae from"use-resize-observer";import{unified as le}from"unified";import ce from"rehype-stringify";import de from"remark-parse";import ue from"remark-rehype";function me(e,t){return e.name===t}const he=function({ext:e}){const{result:r}=a(async e=>{try{return(await function(e){switch(e){case"../../images/file/docx.svg":return import("./docx-2LwnwWwv.js");case"../../images/file/html.svg":return import("./html-BSKTzJZQ.js");case"../../images/file/jpg.svg":return import("./jpg-muicsKjX.js");case"../../images/file/md.svg":return import("./md-DRS7QmE8.js");case"../../images/file/mp3.svg":return import("./mp3-HhP1Gk4B.js");case"../../images/file/mp4.svg":return import("./mp4-CWxSyjdn.js");case"../../images/file/pdf.svg":return import("./pdf-CWBi2u4Z.js");case"../../images/file/png.svg":return import("./png-DNwbFeJk.js");case"../../images/file/pptx.svg":return import("./pptx-Bv4V_F_3.js");case"../../images/file/py.svg":return import("./py-D30pRTJN.js");case"../../images/file/txt.svg":return import("./txt-CsqmEKjF.js");case"../../images/file/unknown.svg":return import("./unknown-DW8znerP.js");case"../../images/file/xlsx.svg":return import("./xlsx-CmkshfKZ.js");default:return new Promise(function(t,r){("function"==typeof queueMicrotask?queueMicrotask:setTimeout)(r.bind(null,new Error("Unknown variable dynamic import: "+e)))})}}(`../../images/file/${e}.svg`)).default}catch{return(await import("./unknown-DW8znerP.js")).default}},[e]);return r?t("img",{width:30,height:30,src:r}):null};function pe({className:r,name:n,size:i=0,loading:a,error:l,onRemove:c,onClick:d}){const u=T.extname(n).substring(1),m=e(ve,{className:r,$error:!!l,onClick:d,children:[e(be,{children:[t(he,{ext:u}),a&&t(O,{variant:"primary"})]}),e(fe,{children:[t("h4",{children:n}),i>0&&t("p",{children:o(i,1)})]}),c&&t(ge,{onClick:e=>{e.preventDefault(),c()},children:t("i",{className:"bi bi-trash3"})})]});return l?t(s,{placement:"top",tooltip:l,children:m}):m}const ge=n.div`
1
+ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as n,useAsync as i,css as o,formatSize as s,Tooltip as a,isCancel as l,isRequestError as c,Form as d,Toast as u,InfiniteScroller as m,useDebounce as h,Offcanvas as p,ModalForm as g,RequestButton as f,Loader as b,useImmer as v,getAbsoluteUrl as y,Lightbox as x,Clipboard as w,Button as k,isImageUrl as E,request as N}from"@topthink/components";import*as j from"react";import{createContext as C,useContext as $,useRef as R,useCallback as S,useEffect as M,useState as q,forwardRef as F,useMemo as A,useImperativeHandle as z,Fragment as I,memo as L,Component as D}from"react";import*as P from"path";import T from"path";import{Spinner as O,Badge as B,Dropdown as U,FormControl as _,CloseButton as H,OverlayTrigger as Q,Popover as J}from"react-bootstrap";import K from"eventemitter3";import W from"react-textarea-autosize";import X from"lodash/isEqual";import{toString as V}from"hast-util-to-string";import Y from"react-markdown";import"katex/dist/katex.min.css";import G from"rehype-highlight";import Z from"rehype-katex";import ee from"remark-breaks";import te from"remark-gfm";import re from"remark-math";import{codes as ne,types as ie}from"micromark-util-symbol";import{markdownLineEnding as oe}from"micromark-util-character";import{createPortal as se}from"react-dom";import ae from"use-resize-observer";import{unified as le}from"unified";import ce from"rehype-stringify";import de from"remark-parse";import ue from"remark-rehype";function me(e,t){return e.name===t}function he({name:t,className:r}){const n=T.extname(t).substring(1),{result:o}=i(async e=>{try{return(await function(e){switch(e){case"../../images/file/docx.svg":return import("./docx-2LwnwWwv.js");case"../../images/file/html.svg":return import("./html-BSKTzJZQ.js");case"../../images/file/jpg.svg":return import("./jpg-muicsKjX.js");case"../../images/file/md.svg":return import("./md-DRS7QmE8.js");case"../../images/file/mp3.svg":return import("./mp3-HhP1Gk4B.js");case"../../images/file/mp4.svg":return import("./mp4-CWxSyjdn.js");case"../../images/file/pdf.svg":return import("./pdf-CWBi2u4Z.js");case"../../images/file/png.svg":return import("./png-DNwbFeJk.js");case"../../images/file/pptx.svg":return import("./pptx-Bv4V_F_3.js");case"../../images/file/py.svg":return import("./py-D30pRTJN.js");case"../../images/file/txt.svg":return import("./txt-CsqmEKjF.js");case"../../images/file/unknown.svg":return import("./unknown-DW8znerP.js");case"../../images/file/xlsx.svg":return import("./xlsx-CmkshfKZ.js");default:return new Promise(function(t,r){("function"==typeof queueMicrotask?queueMicrotask:setTimeout)(r.bind(null,new Error("Unknown variable dynamic import: "+e)))})}}(`../../images/file/${e}.svg`)).default}catch{return(await import("./unknown-DW8znerP.js")).default}},[n]);return o?e(pe,{src:o,className:r}):null}const pe=n.img`
2
+ width: 30px;
3
+ height: 30px;
4
+ `;function ge({className:r,name:n,size:i=0,loading:o,error:l,onRemove:c,onClick:d}){const u=t(ye,{className:r,$error:!!l,onClick:d,children:[t(ve,{children:[e(he,{name:n}),o&&e(O,{variant:"primary"})]}),t(be,{children:[e("h4",{children:n}),i>0&&e("p",{children:s(i,1)})]}),c&&e(fe,{onClick:e=>{e.preventDefault(),c()},children:e("i",{className:"bi bi-trash3"})})]});return l?e(a,{placement:"top",tooltip:l,children:u}):u}const fe=n.div`
2
5
  width: 1.75rem;
3
6
  height: 1.75rem;
4
7
  align-items: center;
@@ -13,7 +16,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
13
16
  color: var(--bs-danger);
14
17
  background-color: var(--bs-danger-bg-subtle);
15
18
  }
16
- `,fe=n.div`
19
+ `,be=n.div`
17
20
  flex: 1;
18
21
  overflow: hidden;
19
22
 
@@ -34,7 +37,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
34
37
  line-height: 20px;
35
38
  margin-bottom: 0;
36
39
  }
37
- `,be=n.div`
40
+ `,ve=n.div`
38
41
  position: relative;
39
42
  width: 3rem;
40
43
  height: 3rem;
@@ -48,7 +51,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
48
51
  position: absolute;
49
52
  }
50
53
 
51
- `,ve=n.div`
54
+ `,ye=n.div`
52
55
  display: flex;
53
56
  gap: .5rem;
54
57
  padding: .5rem;
@@ -62,10 +65,10 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
62
65
  border-color: var(--bs-primary);
63
66
  }
64
67
 
65
- ${e=>e.$error&&i`
68
+ ${e=>e.$error&&o`
66
69
  border-color: var(--bs-danger) !important;
67
70
  `}
68
- `,ye=[".txt",".md",".pdf",".docx",".xlsx",".pptx",".png",".jpg"],xe=C(null),we=C(null);function ke(){const e=$(xe);if(!e)throw new Error("useChatContext must be used within a ChatProvider");return e}function Ee(){return $(we)}function Ne(){const e=$(xe),t=$(we);if(!e||!t)throw new Error("useContext must be used within a Provider");return{...e,...t}}function je({children:e,...r}){return t(xe.Provider,{value:r,children:e})}function Ce({children:e,...r}){const{request:n,loading:i,setLoading:o,...s}=r;return t(xe.Provider,{value:{request:n,loading:i,setLoading:o},children:t(we.Provider,{value:s,children:e})})}function $e({variables:e,values:r,onSubmit:n,onChange:i,children:o}){const s={},a=[],l={};return e.forEach(e=>{s[e.key]={type:"string",title:e.label},"textarea"===e.type?l[e.key]={"ui:widget":"textarea"}:"select"===e.type&&e.options&&(s[e.key].enum=e.options,s[e.key].enumNames=e.options,e.options.length>0&&(s[e.key].default=e.options[0])),e.required&&a.push(e.key)}),t(d,{schema:{type:"object",properties:s,required:a},formData:r,omitExtraData:!0,uiSchema:l,submitText:"开始对话",onSubmit:n,onChange:i,children:o})}const Re=n.button`
71
+ `,xe=[".txt",".md",".pdf",".docx",".xlsx",".pptx",".png",".jpg"],we=C(null),ke=C(null);function Ee(){const e=$(we);if(!e)throw new Error("useChatContext must be used within a ChatProvider");return e}function Ne(){return $(ke)}function je(){const e=$(we),t=$(ke);if(!e||!t)throw new Error("useContext must be used within a Provider");return{...e,...t}}function Ce({children:t,...r}){return e(we.Provider,{value:r,children:t})}function $e({children:t,...r}){const{request:n,loading:i,setLoading:o,...s}=r;return e(we.Provider,{value:{request:n,loading:i,setLoading:o},children:e(ke.Provider,{value:s,children:t})})}function Re({variables:t,values:r,onSubmit:n,onChange:i,children:o}){const s={},a=[],l={};return t.forEach(e=>{s[e.key]={type:"string",title:e.label},"textarea"===e.type?l[e.key]={"ui:widget":"textarea"}:"select"===e.type&&e.options&&(s[e.key].enum=e.options,s[e.key].enumNames=e.options,e.options.length>0&&(s[e.key].default=e.options[0])),e.required&&a.push(e.key)}),e(d,{schema:{type:"object",properties:s,required:a},formData:r,omitExtraData:!0,uiSchema:l,submitText:"开始对话",onSubmit:n,onChange:i,children:o})}const Se=n.button`
69
72
  color: var(--bs-secondary);
70
73
  cursor: pointer;
71
74
  display: flex;
@@ -88,7 +91,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
88
91
  background-color: var(--bs-gray-200);
89
92
  }
90
93
 
91
- ${({$fill:e})=>e&&i`
94
+ ${({$fill:e})=>e&&o`
92
95
  background-color: var(--bs-gray-200);
93
96
 
94
97
  &:hover:not(:disabled) {
@@ -96,12 +99,12 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
96
99
  }
97
100
  `};
98
101
 
99
- `;let Se=class{#e;#t;constructor(){this.#t=new K}onResult(e){this.#t.on("result",e)}onRecording(e){this.#t.on("recording",e)}onTranscribing(e){this.#t.on("transcribing",e)}start(){if(!this.#e){const e=window.SpeechRecognition||window.webkitSpeechRecognition;if(!e)return void u.error("浏览器不支持语音识别");const t=new e;t.continuous=!0,t.lang=navigator.language,t.onresult=e=>{const t=Array.from(e.results).at(-1)?.item(0).transcript;t&&this.#t.emit("result",t)},t.onspeechend=()=>{this.#t.emit("recording",!1)},t.onerror=e=>{this.#t.emit("recording",!1),u.error(e.error)},this.#e=t}this.#t.emit("recording",!0),this.#e.start()}stop(){this.#e?.stop(),this.#t.emit("recording",!1)}},Me=class{#t;#r;#n;#i;constructor(e){this.#r=e,this.#t=new K}async start(){try{this.#n=await navigator.mediaDevices.getUserMedia({audio:!0}),this.#i=new AudioContext;const e=this.#i.createScriptProcessor(0,1,1);this.#i.createMediaStreamSource(this.#n).connect(e),e.connect(this.#i.destination);let t=[],r=0;const n=.01,i=1;e.onaudioprocess=e=>{const o=e.playbackTime,s=e.inputBuffer.getChannelData(0);let a=!0;for(let e=0;e<s.length;e++)if(Math.abs(s[e])>n){a=!1;break}if(a){const e=o-r;e>i&&(t.length>1&&(this.save(t),t=[]),e>10&&this.stop())}else t.push(new Float32Array(s)),r=o},this.#t.emit("recording",!0)}catch(e){u.error(e.message)}}convertBuffer(e){const t=new Float32Array(e),r=new Int16Array(e.length);for(let e=0;e<t.length;e++){const n=Math.max(-1,Math.min(1,t[e]));r[e]=n<0?32768*n:32767*n}return r}async encodeMP3(e){const{Mp3Encoder:t}=await import("@breezystack/lamejs"),r=new t(1,44100,128),n=[];for(const t of e){const e=this.convertBuffer(t),i=1152;let o=e.length;for(let t=0;o>=0;t+=i){const s=e.subarray(t,t+i),a=r.encodeBuffer(s);n.push(new Int8Array(a)),o-=i}}return n.push(r.flush()),new Blob(n,{type:"audio/mp3"})}async save(e){const t=await this.encodeMP3(e);try{this.#t.emit("transcribing",!0);const e=await this.#r(t);e&&this.#t.emit("result",e)}catch(e){}finally{this.#t.emit("transcribing",!1)}}stop(){this.#n&&(this.#n.getTracks().forEach(e=>e.stop()),this.#n=void 0),this.#i&&(this.#i.close(),this.#i=void 0),this.#t.emit("recording",!1)}onResult(e){this.#t.on("result",e)}onRecording(e){this.#t.on("recording",e)}onTranscribing(e){this.#t.on("transcribing",e)}};const qe=F(({onResult:r,model:n="builtin"},i)=>{const{request:o}=ke(),a=A(()=>{if("builtin"!==n)return async e=>{const t=new FormData;t.append("file",e,"audio.mp3"),t.append("model",n);return(await o({url:"/transcriptions",method:"post",data:t})).text}},[n]),{start:l,stop:c,recording:d,transcribing:u}=function({onResult:e,loader:t}){const r=R(),[n,i]=q(!1),[o,s]=q(!1);return M(()=>()=>{r.current&&(r.current.stop(),r.current=void 0)},[]),{recording:n,transcribing:o,start:async()=>{r.current||(r.current=t?new Me(t):new Se,r.current.onRecording(i),r.current.onTranscribing(s),r.current.onResult(e)),r.current.start()},stop:()=>{r.current&&r.current.stop()}}}({onResult:r,loader:a});return z(i,()=>({start:l,stop:c}),[l,c]),t(s,{tooltip:d?"停止":"语音输入",placement:"top",children:e(Re,{onMouseDown:e=>{e.preventDefault(),d?c():l()},children:[u&&t(Fe,{animation:"border",variant:"primary",size:"sm"}),t("i",d?{className:"bi bi-mic-fill text-danger"}:{className:"bi bi-mic"})]})})}),Fe=n(O)`
102
+ `;let Me=class{#e;#t;constructor(){this.#t=new K}onResult(e){this.#t.on("result",e)}onRecording(e){this.#t.on("recording",e)}onTranscribing(e){this.#t.on("transcribing",e)}start(){if(!this.#e){const e=window.SpeechRecognition||window.webkitSpeechRecognition;if(!e)return void u.error("浏览器不支持语音识别");const t=new e;t.continuous=!0,t.lang=navigator.language,t.onresult=e=>{const t=Array.from(e.results).at(-1)?.item(0).transcript;t&&this.#t.emit("result",t)},t.onspeechend=()=>{this.#t.emit("recording",!1)},t.onerror=e=>{this.#t.emit("recording",!1),u.error(e.error)},this.#e=t}this.#t.emit("recording",!0),this.#e.start()}stop(){this.#e?.stop(),this.#t.emit("recording",!1)}},qe=class{#t;#r;#n;#i;constructor(e){this.#r=e,this.#t=new K}async start(){try{this.#n=await navigator.mediaDevices.getUserMedia({audio:!0}),this.#i=new AudioContext;const e=this.#i.createScriptProcessor(0,1,1);this.#i.createMediaStreamSource(this.#n).connect(e),e.connect(this.#i.destination);let t=[],r=0;const n=.01,i=1;e.onaudioprocess=e=>{const o=e.playbackTime,s=e.inputBuffer.getChannelData(0);let a=!0;for(let e=0;e<s.length;e++)if(Math.abs(s[e])>n){a=!1;break}if(a){const e=o-r;e>i&&(t.length>1&&(this.save(t),t=[]),e>10&&this.stop())}else t.push(new Float32Array(s)),r=o},this.#t.emit("recording",!0)}catch(e){u.error(e.message)}}convertBuffer(e){const t=new Float32Array(e),r=new Int16Array(e.length);for(let e=0;e<t.length;e++){const n=Math.max(-1,Math.min(1,t[e]));r[e]=n<0?32768*n:32767*n}return r}async encodeMP3(e){const{Mp3Encoder:t}=await import("@breezystack/lamejs"),r=new t(1,44100,128),n=[];for(const t of e){const e=this.convertBuffer(t),i=1152;let o=e.length;for(let t=0;o>=0;t+=i){const s=e.subarray(t,t+i),a=r.encodeBuffer(s);n.push(new Int8Array(a)),o-=i}}return n.push(r.flush()),new Blob(n,{type:"audio/mp3"})}async save(e){const t=await this.encodeMP3(e);try{this.#t.emit("transcribing",!0);const e=await this.#r(t);e&&this.#t.emit("result",e)}catch(e){}finally{this.#t.emit("transcribing",!1)}}stop(){this.#n&&(this.#n.getTracks().forEach(e=>e.stop()),this.#n=void 0),this.#i&&(this.#i.close(),this.#i=void 0),this.#t.emit("recording",!1)}onResult(e){this.#t.on("result",e)}onRecording(e){this.#t.on("recording",e)}onTranscribing(e){this.#t.on("transcribing",e)}};const Fe=F(({onResult:r,model:n="builtin"},i)=>{const{request:o}=Ee(),s=A(()=>{if("builtin"!==n)return async e=>{const t=new FormData;t.append("file",e,"audio.mp3"),t.append("model",n);return(await o({url:"/transcriptions",method:"post",data:t})).text}},[n]),{start:l,stop:c,recording:d,transcribing:u}=function({onResult:e,loader:t}){const r=R(),[n,i]=q(!1),[o,s]=q(!1);return M(()=>()=>{r.current&&(r.current.stop(),r.current=void 0)},[]),{recording:n,transcribing:o,start:async()=>{r.current||(r.current=t?new qe(t):new Me,r.current.onRecording(i),r.current.onTranscribing(s),r.current.onResult(e)),r.current.start()},stop:()=>{r.current&&r.current.stop()}}}({onResult:r,loader:s});return z(i,()=>({start:l,stop:c}),[l,c]),e(a,{tooltip:d?"停止":"语音输入",placement:"top",children:t(Se,{onMouseDown:e=>{e.preventDefault(),d?c():l()},children:[u&&e(Ae,{animation:"border",variant:"primary",size:"sm"}),e("i",d?{className:"bi bi-mic-fill text-danger"}:{className:"bi bi-mic"})]})})}),Ae=n(O)`
100
103
  position: absolute;
101
104
  --bs-spinner-width: .75rem;
102
105
  --bs-spinner-height: .75rem;
103
106
  --bs-spinner-border-width: 0.1em;
104
- `,Ae=F(({className:e,children:r,size:n,tooltip:i,placement:o,onClick:a,onMouseDown:l},c)=>{const d=t(ze,{ref:c,className:e,onClick:a,onMouseDown:l,$size:n,children:r});return i?t(s,{tooltip:i,placement:o,children:d}):d}),ze=n.div`
107
+ `,ze=F(({className:t,children:r,size:n,tooltip:i,placement:o,onClick:s,onMouseDown:l},c)=>{const d=e(Ie,{ref:c,className:t,onClick:s,onMouseDown:l,$size:n,children:r});return i?e(a,{tooltip:i,placement:o,children:d}):d}),Ie=n.div`
105
108
  width: 2rem;
106
109
  height: 2rem;
107
110
  align-items: center;
@@ -116,7 +119,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
116
119
  font-size: 1.5rem;
117
120
  }
118
121
 
119
- ${({$size:e})=>"sm"===e&&i`
122
+ ${({$size:e})=>"sm"===e&&o`
120
123
  width: 1.5rem;
121
124
  height: 1.5rem;
122
125
  font-size: 1rem;
@@ -125,10 +128,10 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
125
128
  &:hover {
126
129
  background-color: var(--bs-secondary-bg-subtle);
127
130
  }
128
- `;function Ie(){const{request:n,reset:i,conversationId:o}=Ne(),[s,a]=q(!1),[l,c]=q(""),[d,u]=q(""),m=h(e=>{u(e)},500);return M(()=>{m(l)},[l]),e(r,{children:[t(Ae,{tooltip:"历史记录",placement:"top",onClick:()=>a(!0),children:t("i",{className:"bi bi-clock-history"})}),t(p,{show:s,onHide:()=>{a(!1)},placement:"end",headerAs:Oe,header:e(r,{children:[t("span",{children:"聊天历史记录"}),t(Be,{children:t(_,{type:"search",placeholder:"搜索聊天记录...",value:l,onChange:e=>c(e.target.value),autoFocus:!0})})]}),bodyAs:Le,children:s&&t(Te,{children:t(Pe,{useWindow:!1,source:e=>n({url:"/conversation",params:{...e,...d&&{keyword:d}}}),render:({data:s,loading:l,setData:c})=>s.length||l?e(r,{children:[s.map((s,l)=>{const d=o===s.id;return e(I,{children:[l>0&&t("hr",{className:"mx-2 my-2"}),e(De,{children:[d&&t(B,{bg:"secondary",children:"当前"}),t("span",{className:"overflow-hidden text-truncate flex-fill",onClick:()=>{i(s),a(!1)},children:s.title||"未命名对话"}),e(U,{align:"end",children:[t(U.Toggle,{size:"sm",className:"no-caret",as:Ae,children:t("i",{className:"bi bi-three-dots-vertical"})}),e(U.Menu,{children:[t(g,{buttonProps:{as:U.Item},text:e(r,{children:[t("i",{className:"bi bi-pencil me-2"}),"重命名"]}),modalProps:{header:"编辑对话名称"},schema:{type:"object",properties:{title:{type:"string"}}},uiSchema:{title:{"ui:label":!1,"ui:autofocus":!0}},formData:{title:s.title},onRequest:e=>n({url:`/conversation/${s.id}`,method:"PUT",data:e}),onSuccess:(e,t)=>{c(e=>{const r=e.findIndex(e=>e.id===s.id);-1!==r&&Object.assign(e[r],t)})}}),e(f,{as:U.Item,confirm:"确定要删除吗?",onRequest:()=>n({url:`/conversation/${s.id}`,method:"DELETE"}),onSuccess:()=>{c(e=>{const t=e.findIndex(e=>e.id===s.id);-1!==t&&e.splice(t,1)}),d&&i()},children:[t("i",{className:"bi bi-trash3 me-2"}),"删除"]})]})]})]})]},s.id)}),l&&t(b,{wrap:!0})]}):t("div",{className:"text-muted text-center py-5",children:d?"未找到匹配的聊天记录":"暂无对话记录"})},d)})})]})}const Le=n.div`
131
+ `;function Le(){const{request:n,reset:i,conversationId:o}=je(),[s,a]=q(!1),[l,c]=q(""),[d,u]=q(""),m=h(e=>{u(e)},500);return M(()=>{m(l)},[l]),t(r,{children:[e(ze,{tooltip:"历史记录",placement:"top",onClick:()=>a(!0),children:e("i",{className:"bi bi-clock-history"})}),e(p,{show:s,onHide:()=>{a(!1)},placement:"end",headerAs:Be,header:t(r,{children:[e("span",{children:"聊天历史记录"}),e(Ue,{children:e(_,{type:"search",placeholder:"搜索聊天记录...",value:l,onChange:e=>c(e.target.value),autoFocus:!0})})]}),bodyAs:De,children:s&&e(Oe,{children:e(Te,{useWindow:!1,source:e=>n({url:"/conversation",params:{...e,...d&&{keyword:d}}}),render:({data:s,loading:l,setData:c})=>s.length||l?t(r,{children:[s.map((s,l)=>{const d=o===s.id;return t(I,{children:[l>0&&e("hr",{className:"mx-2 my-2"}),t(Pe,{children:[d&&e(B,{bg:"secondary",children:"当前"}),e("span",{className:"overflow-hidden text-truncate flex-fill",onClick:()=>{i(s),a(!1)},children:s.title||"未命名对话"}),t(U,{align:"end",children:[e(U.Toggle,{size:"sm",className:"no-caret",as:ze,children:e("i",{className:"bi bi-three-dots-vertical"})}),t(U.Menu,{children:[e(g,{buttonProps:{as:U.Item},text:t(r,{children:[e("i",{className:"bi bi-pencil me-2"}),"重命名"]}),modalProps:{header:"编辑对话名称"},schema:{type:"object",properties:{title:{type:"string"}}},uiSchema:{title:{"ui:label":!1,"ui:autofocus":!0}},formData:{title:s.title},onRequest:e=>n({url:`/conversation/${s.id}`,method:"PUT",data:e}),onSuccess:(e,t)=>{c(e=>{const r=e.findIndex(e=>e.id===s.id);-1!==r&&Object.assign(e[r],t)})}}),t(f,{as:U.Item,confirm:"确定要删除吗?",onRequest:()=>n({url:`/conversation/${s.id}`,method:"DELETE"}),onSuccess:()=>{c(e=>{const t=e.findIndex(e=>e.id===s.id);-1!==t&&e.splice(t,1)}),d&&i()},children:[e("i",{className:"bi bi-trash3 me-2"}),"删除"]})]})]})]})]},s.id)}),l&&e(b,{wrap:!0})]}):e("div",{className:"text-muted text-center py-5",children:d?"未找到匹配的聊天记录":"暂无对话记录"})},d)})})]})}const De=n.div`
129
132
  padding: 0;
130
133
  overflow: hidden;
131
- `,De=n.div`
134
+ `,Pe=n.div`
132
135
  gap: .5rem;
133
136
  display: flex;
134
137
  cursor: pointer;
@@ -147,33 +150,33 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
147
150
  display: block;
148
151
  }
149
152
  }
150
- `,Pe=n(m)`
153
+ `,Te=n(m)`
151
154
  display: flex;
152
155
  flex-direction: column;
153
156
  padding: .5rem;
154
- `,Te=n.div`
157
+ `,Oe=n.div`
155
158
  height: 100%;
156
159
  overflow-y: auto;
157
- `,Oe=n.div`
160
+ `,Be=n.div`
158
161
  display: flex;
159
162
  align-items: center;
160
163
  justify-content: space-between;
161
164
  gap: 0.5rem;
162
165
  flex: 1;
163
166
  margin-right: .5rem;
164
- `,Be=n.div`
167
+ `,Ue=n.div`
165
168
  display: flex;
166
169
  align-items: center;
167
170
  gap: 0.5rem;
168
- `;var Ue;function _e(){return _e=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},_e.apply(null,arguments)}const He=e=>j.createElement("svg",_e({width:"1em",height:"1em",fill:"currentColor",viewBox:"0 0 256 256"},e),Ue||(Ue=j.createElement("path",{fillRule:"evenodd",d:"M128 22C69.458 22 22 69.458 22 128v96c0 5.523 4.477 10 10 10h96c58.542 0 106-47.458 106-106S186.542 22 128 22m0 56c5.523 0 10 4.477 10 10v30h30c5.523 0 10 4.477 10 10s-4.477 10-10 10h-30v30c0 5.523-4.477 10-10 10s-10-4.477-10-10v-30H88c-5.523 0-10-4.477-10-10s4.477-10 10-10h30V88c0-5.523 4.477-10 10-10",clipRule:"evenodd","data-follow-fill":"#000"})));function Qe({onClick:e}){const{reset:r}=Ne();return t(Ae,{className:"text-primary",tooltip:"新会话",placement:"top",onClick:()=>e?.()??r(),children:t(He,{})})}function Je({children:n,actions:i}){const o=e(r,{children:[t(Ie,{}),t(Qe,{})]}),s="function"==typeof i?i({History:Ie,Reset:Qe}):e(r,{children:[i,o]});return e(We,{children:[n,t(Ke,{children:s})]})}const Ke=n.div`
171
+ `;var _e;function He(){return He=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},He.apply(null,arguments)}const Qe=e=>j.createElement("svg",He({width:"1em",height:"1em",fill:"currentColor",viewBox:"0 0 256 256"},e),_e||(_e=j.createElement("path",{fillRule:"evenodd",d:"M128 22C69.458 22 22 69.458 22 128v96c0 5.523 4.477 10 10 10h96c58.542 0 106-47.458 106-106S186.542 22 128 22m0 56c5.523 0 10 4.477 10 10v30h30c5.523 0 10 4.477 10 10s-4.477 10-10 10h-30v30c0 5.523-4.477 10-10 10s-10-4.477-10-10v-30H88c-5.523 0-10-4.477-10-10s4.477-10 10-10h30V88c0-5.523 4.477-10 10-10",clipRule:"evenodd","data-follow-fill":"#000"})));function Je({onClick:t}){const{reset:r}=je();return e(ze,{className:"text-primary",tooltip:"新会话",placement:"top",onClick:()=>t?.()??r(),children:e(Qe,{})})}function Ke({children:n,actions:i}){const o=t(r,{children:[e(Le,{}),e(Je,{})]}),s="function"==typeof i?i({History:Le,Reset:Je}):t(r,{children:[i,o]});return t(Xe,{children:[n,e(We,{children:s})]})}const We=n.div`
169
172
  display: flex;
170
173
  gap: .25rem;
171
174
  margin-left: auto;
172
- `,We=n.div`
175
+ `,Xe=n.div`
173
176
  margin-bottom: .5rem;
174
177
  display: flex;
175
178
  padding: 0 .125rem;
176
- `;var Xe=F(function({readonly:e,autoFocus:r,placeholder:n,minRows:i,maxRows:o,onSubmit:s,onFocusedChange:a,onQueryChange:l,onPaste:c},d){const u=R(null),[m,h]=q(""),p=S(()=>{const e=u.current;if(!e)return;e.focus();const t=e.value.length;e.setSelectionRange(t,t)},[]),g=S(e=>{const t="string"==typeof e?e:e(m);h(t),l?.(t.trim()),requestAnimationFrame(()=>{p()})},[m,l,p]);return z(d,()=>({setContent:g,focus(){p()}}),[g,p]),t(Ve,{ref:u,value:m,minRows:i,maxRows:o,readOnly:e,autoFocus:r,placeholder:n,onFocus:()=>a?.(!0),onBlur:()=>a?.(!1),onChange:e=>{h(e.target.value),l?.(e.target.value.trim())},onPaste:e=>{c?.(e.nativeEvent)},onKeyDown:e=>{e.nativeEvent.isComposing||"Enter"!==e.key||e.shiftKey||(e.preventDefault(),e.stopPropagation(),s?.())}})});const Ve=n(W)`
179
+ `;var Ve=F(function({readonly:t,autoFocus:r,placeholder:n,minRows:i,maxRows:o,onSubmit:s,onFocusedChange:a,onQueryChange:l,onPaste:c},d){const u=R(null),[m,h]=q(""),p=S(()=>{const e=u.current;if(!e)return;e.focus();const t=e.value.length;e.setSelectionRange(t,t)},[]),g=S(e=>{const t="string"==typeof e?e:e(m);h(t),l?.(t.trim()),requestAnimationFrame(()=>{p()})},[m,l,p]);return z(d,()=>({setContent:g,focus(){p()}}),[g,p]),e(Ye,{ref:u,value:m,minRows:i,maxRows:o,readOnly:t,autoFocus:r,placeholder:n,onFocus:()=>a?.(!0),onBlur:()=>a?.(!1),onChange:e=>{h(e.target.value),l?.(e.target.value.trim())},onPaste:e=>{c?.(e.nativeEvent)},onKeyDown:e=>{e.nativeEvent.isComposing||"Enter"!==e.key||e.shiftKey||(e.preventDefault(),e.stopPropagation(),s?.())}})});const Ye=n(W)`
177
180
  min-height: calc(1.5em + 1rem);
178
181
  width: 100%;
179
182
  padding: 0.5rem 0.5rem 0.5rem 0.75rem;
@@ -182,14 +185,14 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
182
185
  resize: none;
183
186
  line-height: 1.5;
184
187
  background: transparent;
185
- `;var Ye=F(function({className:r,fileTypes:n,speech:i,scrollRef:o,variables:a,minRows:d=1,maxRows:m=5,toolbar:h,toolbarActions:p,disabled:g,autoFocus:f,tools:b,renderEditableInput:y,placeholder:x="请输入你的问题, Enter+Shift换行, Enter发送",supportStop:w=!1,onEvent:k,onNewConversation:E},N){const j=R(null),C=R(null),$=R(null),[F,I]=q(""),[L,D]=q(""),[T,O]=v([]),[B,U]=q(!1),_=n&&n.length>0?n:ye,Q=S(()=>{requestAnimationFrame(()=>{$.current?.focus()})},[]),{send:J,resume:K,stop:W}=function(e){const{setLoading:t,request:r}=ke(),n=Ee(),i=n?.setMessages,o=n?.setConversationId,s=n?.conversationId,a=n?.messages,d=!0===e?.supportStop,{onEvent:u,onNewConversation:m,onComplete:h}=e??{},p=R(null),g=R(),f=R(s),b=()=>(p.current&&p.current.abort(),p.current=new AbortController,p.current.signal),v=S(e=>{const t=(e,r)=>{Object.entries(r).forEach(([r,n])=>{if("string"!=typeof n)if(!n||"object"!=typeof n||Array.isArray(n))e[r]=n;else if("index"in n){const{index:i,...o}=n;Array.isArray(e[r])||(e[r]=[]),e[r][i]||(e[r][i]={}),t(e[r][i],o)}else e[r]=n;else e[r]="string"==typeof e[r]?e[r]+n:n})};if(e.data)if("[DONE]"!=e.data)try{const r=JSON.parse(e.data);r.conversation?(f.current=r.conversation,o?.(r.conversation)):r.event?u?.(r.event):i?.(e=>{const n=e[e.length-1];if(r.chunks){if(n.chunks){const e=r.chunks.index;if(n.chunks[e]||(n.chunks[e]={content:"",reasoning:"",tools:[]}),r.chunks.error)n.chunks[e].error=r.chunks.error;else if(r.chunks.tools){n.chunks[e].tools||(n.chunks[e].tools=[]);const{index:i,...o}=r.chunks.tools;n.chunks[e].tools[i]||(n.chunks[e].tools[i]={name:"",title:"",arguments:""}),t(n.chunks[e].tools[i],o)}else if(r.chunks.reasoning)n.chunks[e].reasoning+=r.chunks.reasoning;else if(r.chunks.content)if("object"==typeof r.chunks.content){Array.isArray(n.chunks[e].content)||(n.chunks[e].content=[]);const t=r.chunks.content.index,i=r.chunks.content.value;"string"==typeof i?(n.chunks[e].content[t]||(n.chunks[e].content[t]=""),n.chunks[e].content[t]+=i):n.chunks[e].content[t]=i}else n.chunks[e].content+=r.chunks.content;else r.chunks.node&&(n.chunks[e].node={...n.chunks[e].node,...r.chunks.node})}}else r.stats?n.stats=r.stats:r.id&&(n.id=r.id)})}catch(e){console.error(e)}else i?.(e=>{e[e.length-1].loading=!1})},[u]),y=S(e=>{if(l(e))i?.(e=>{const t=e[e.length-1];t&&(t.loading=!1)});else{let t="未知错误";c(e)&&(t=401==e.response?.status?"未授权或授权已过期,请刷新页面后重试":"string"==typeof e.errors?e.errors:Object.values(e.errors).join("\n")),i?.(e=>{const r=e[e.length-1];r.chunks&&(0===r.chunks.length?r.chunks=[{error:t}]:r.chunks[r.chunks.length-1].error=t),r.loading=!1})}},[]),x=S(async e=>{g.current=e;try{const n=b();t(!0),i?.(e=>{e[e.length-1].loading=!0,delete e[e.length-1].stats});let o={url:"message",method:"get",params:{id:e},onMessage:v,signal:n};await r(o)}catch(e){y(e)}finally{p.current=null,g.current=void 0}t(!1),h?.()},[r,u,m,h]),w=S(async(e,...o)=>{"string"==typeof e&&(e={query:e,...o});const{query:s,files:a=[],variables:l={},quote:c}=e;let d=null,u=null;if(s||a.length>0){const e=b();t(!0),n?.setSuggestions?.([]),i?.(e=>{e.push({query:s,quote:c,files:a,variables:l,chunks:[],loading:!0})});try{let t={method:"post",data:{query:s,quote:c,files:a,variables:l,conversation:f.current},onMessage:v,signal:e};const n=await r(t);d=n.message??null,u=n.conversation??null}catch(e){y(e)}finally{p.current=null}if(d){let e=!1;u&&!f.current&&(e=m?.(u)??!1),e||await x(d.id)}else t(!1),h?.()}},[r,u,m,h]),k=S(async e=>{let n=null;try{const o=b();t(!0),i?.(e=>{e[e.length-1].loading=!0});let s={url:"resume",method:"post",data:{conversation:f.current,chunk:e.chunk,tool:e.tool,payload:e.payload},onMessage:v,signal:o};n=(await r(s)).message??null}catch(e){y(e)}finally{p.current=null}n?await x(n.id):(t(!1),h?.())},[r,u,m,h]),E=S(async()=>{if(d)if(g.current)try{await r({url:"stop",method:"post",data:{id:g.current}})}catch{}else p.current?.abort()},[r,d]),N=()=>{const e=a?.[a.length-1];e&&e.id&&2===e.status&&x(e.id)};return M(()=>(N(),()=>{p.current&&p.current.abort()}),[]),M(()=>{s!=f.current&&(f.current=s,p.current&&p.current.abort(),N())},[s]),{send:w,resume:k,stop:E}}({supportStop:w,onEvent:k,onNewConversation:E,onComplete:Q}),{loading:X,request:V}=ke(),Y=Ee(),[G,Z]=q();M(()=>{const e=(Y?.messages||[]).filter(e=>!!e.query);Z(e.at(-1)?.variables)},[Y?.messages]),M(()=>{!n&&T.length>0&&O([])},[n]),M(()=>{const e=o?.current;if(e){const t=e=>{if(e.target instanceof HTMLAnchorElement&&"#!question"===e.target.hash){e.preventDefault();const t={query:e.target.text};a&&(t.variables={...G,...a.values}),J(t)}};return e.addEventListener("click",t),()=>{e.removeEventListener("click",t)}}},[a,G]);const ee=S(e=>{const t=e.map((e,t)=>{if(e.name)return e;const r=e.type.split("/")[1]||"png";return new File([e],`screenshot-${Date.now()}-${t}.${r}`,{type:e.type})}).filter(e=>!(!_.includes("*")&&!_.includes(P.extname(e.name)))&&!(e.size>20971520)).slice(0,6-T.length);return 0!==t.length&&(O(e=>{e.push(...t.map(e=>({file:e})))}),t.forEach(async e=>{try{const t=new FormData;t.set("file",e);const r=await V({method:"POST",url:"/upload",data:t});O(t=>{const n=t.find(t=>t.file===e);n&&(n.path=r.path)})}catch(t){const r=c(t)?t.message:"unknown error";O(t=>{const n=t.find(t=>t.file===e);n&&(n.error=r)})}}),!0)},[T.length,_,V,O]),te=S(({target:e})=>{e.files&&ee(Array.from(e.files)),e.value=""},[ee]),re=S(e=>{const t=Array.from(e.clipboardData?.files||[]),r=Array.from(e.clipboardData?.items||[]).filter(e=>"file"===e.kind).map(e=>e.getAsFile()).filter(e=>!!e),n=t.length>0?t:r;0!==n.length&&ee(n)&&e.preventDefault()},[ee]),ne=T.flatMap(({file:e,path:t})=>t?[{name:e.name,size:e.size,path:t}]:[]),ie=S(()=>{if(F||ne.length>0){const e={query:F,files:ne};a&&(e.variables={...G,...a.values}),L&&(e.quote=L),J(e),$.current?.setContent(""),D(""),O([]),C.current?.stop(!0)}},[F,ne,a,G,L]),oe=A(()=>({setQuery(e){$.current?.setContent(e)},setQuote:D,send:J,resume:K,focus(){$.current?.focus()}}),[D,J,K]);if(M(()=>{Y?.setInput?.(oe)},[oe]),z(N,()=>oe,[oe]),a){const e=a.config.filter(e=>!(e.key in(a.values||{}))),r=(t,r=!1)=>!!t&&e.every(e=>{const n=!e.required||t?.[e.key];return!n&&r&&u.error("请完善必填信息"),n});if(e.length>0&&!r(G))return t(Ze,{children:t(Ge,{children:t($e,{values:G,variables:e,onSubmit:({formData:e})=>{if(r(e,!0))return Z(e),!0}})})})}return e("div",{className:r,children:[h&&t(Je,{actions:p,children:h}),e(ot,{$focused:B&&!X,children:[T.length>0&&t(tt,{children:T.map(({file:e,error:r,path:n},i)=>{const o=void 0===r&&void 0===n;return t(et,{name:e.name,size:e.size,error:r,loading:o,onRemove:()=>{O(t=>{const r=t.findIndex(t=>t.file===e);-1!==r&&t.splice(r,1)})}},i)})}),!!L&&e(it,{children:[t("i",{className:"bi bi-quote"}),t("p",{children:L}),t(H,{onClick:()=>D("")})]}),e(rt,{$minRows:d,children:[y?.({Component:Xe,props:{ref:$,readonly:X||g,autoFocus:f,placeholder:x,minRows:d,maxRows:m,onSubmit:ie,onFocusedChange:U,onQueryChange:I,onPaste:re}})||t(Xe,{ref:$,readonly:X||g,autoFocus:f,placeholder:x,minRows:d,maxRows:m,onSubmit:ie,onFocusedChange:U,onQueryChange:I,onPaste:re}),e(nt,{children:[b,n&&t(s,{tooltip:"可上传不超过6个小于20MB的文件",placement:"top",children:e(Re,{disabled:T.length>=6,onClick:()=>j.current?.click(),children:[t("input",{onChange:te,multiple:!0,accept:_.join(","),ref:j,type:"file",hidden:!0}),t("i",{className:"bi bi-file-earmark-arrow-up"})]})}),i&&t(qe,{ref:C,model:i.model,onResult:e=>{$.current?.setContent(t=>t+e+" ")}}),t(Re,{$fill:X&&w,className:X&&w?"text-danger":"text-primary",disabled:!F&&0===ne.length&&!X||X&&!w,onClick:e=>{e.preventDefault(),X&&w?W():ie()},children:t("i",X&&w?{className:"bi bi-square-fill fs-7"}:{className:"bi bi-send-fill"})})]})]})]})]})});const Ge=n.div`
188
+ `;var Ge=F(function({className:r,fileTypes:n,speech:i,scrollRef:o,variables:s,minRows:d=1,maxRows:m=5,toolbar:h,toolbarActions:p,disabled:g,autoFocus:f,tools:b,renderEditableInput:y,placeholder:x="请输入你的问题, Enter+Shift换行, Enter发送",supportStop:w=!1,onEvent:k,onNewConversation:E},N){const j=R(null),C=R(null),$=R(null),[F,I]=q(""),[L,D]=q(""),[T,O]=v([]),[B,U]=q(!1),_=n&&n.length>0?n:xe,Q=S(()=>{requestAnimationFrame(()=>{$.current?.focus()})},[]),{send:J,resume:K,stop:W}=function(e){const{setLoading:t,request:r}=Ee(),n=Ne(),i=n?.setMessages,o=n?.setConversationId,s=n?.conversationId,a=n?.messages,d=!0===e?.supportStop,{onEvent:u,onNewConversation:m,onComplete:h}=e??{},p=R(null),g=R(),f=R(s),b=()=>(p.current&&p.current.abort(),p.current=new AbortController,p.current.signal),v=S(e=>{const t=(e,r)=>{Object.entries(r).forEach(([r,n])=>{if("string"!=typeof n)if(!n||"object"!=typeof n||Array.isArray(n))e[r]=n;else if("index"in n){const{index:i,...o}=n;Array.isArray(e[r])||(e[r]=[]),e[r][i]||(e[r][i]={}),t(e[r][i],o)}else e[r]=n;else e[r]="string"==typeof e[r]?e[r]+n:n})};if(e.data)if("[DONE]"!=e.data)try{const r=JSON.parse(e.data);r.conversation?(f.current=r.conversation,o?.(r.conversation)):r.event?u?.(r.event):i?.(e=>{const n=e[e.length-1];if(r.chunks){if(n.chunks){const e=r.chunks.index;if(n.chunks[e]||(n.chunks[e]={content:"",reasoning:"",tools:[]}),r.chunks.error)n.chunks[e].error=r.chunks.error;else if(r.chunks.tools){n.chunks[e].tools||(n.chunks[e].tools=[]);const{index:i,...o}=r.chunks.tools;n.chunks[e].tools[i]||(n.chunks[e].tools[i]={name:"",title:"",arguments:""}),t(n.chunks[e].tools[i],o)}else if(r.chunks.reasoning)n.chunks[e].reasoning+=r.chunks.reasoning;else if(r.chunks.content)if("object"==typeof r.chunks.content){Array.isArray(n.chunks[e].content)||(n.chunks[e].content=[]);const t=r.chunks.content.index,i=r.chunks.content.value;"string"==typeof i?(n.chunks[e].content[t]||(n.chunks[e].content[t]=""),n.chunks[e].content[t]+=i):n.chunks[e].content[t]=i}else n.chunks[e].content+=r.chunks.content;else r.chunks.node&&(n.chunks[e].node={...n.chunks[e].node,...r.chunks.node})}}else r.stats?n.stats=r.stats:r.id&&(n.id=r.id)})}catch(e){console.error(e)}else i?.(e=>{e[e.length-1].loading=!1})},[u]),y=S(e=>{if(l(e))i?.(e=>{const t=e[e.length-1];t&&(t.loading=!1)});else{let t="未知错误";c(e)&&(t=401==e.response?.status?"未授权或授权已过期,请刷新页面后重试":"string"==typeof e.errors?e.errors:Object.values(e.errors).join("\n")),i?.(e=>{const r=e[e.length-1];r.chunks&&(0===r.chunks.length?r.chunks=[{error:t}]:r.chunks[r.chunks.length-1].error=t),r.loading=!1})}},[]),x=S(async e=>{g.current=e;try{const n=b();t(!0),i?.(e=>{e[e.length-1].loading=!0,delete e[e.length-1].stats});let o={url:"message",method:"get",params:{id:e},onMessage:v,signal:n};await r(o)}catch(e){y(e)}finally{p.current=null,g.current=void 0}t(!1),h?.()},[r,u,m,h]),w=S(async(e,...o)=>{"string"==typeof e&&(e={query:e,...o});const{query:s,files:a=[],variables:l={},quote:c}=e;let d=null,u=null;if(s||a.length>0){const e=b();t(!0),n?.setSuggestions?.([]),i?.(e=>{e.push({query:s,quote:c,files:a,variables:l,chunks:[],loading:!0})});try{let t={method:"post",data:{query:s,quote:c,files:a,variables:l,conversation:f.current},onMessage:v,signal:e};const n=await r(t);d=n.message??null,u=n.conversation??null}catch(e){y(e)}finally{p.current=null}if(d){let e=!1;u&&!f.current&&(e=m?.(u)??!1),e||await x(d.id)}else t(!1),h?.()}},[r,u,m,h]),k=S(async e=>{let n=null;try{const o=b();t(!0),i?.(e=>{e[e.length-1].loading=!0});let s={url:"resume",method:"post",data:{conversation:f.current,chunk:e.chunk,tool:e.tool,payload:e.payload},onMessage:v,signal:o};n=(await r(s)).message??null}catch(e){y(e)}finally{p.current=null}n?await x(n.id):(t(!1),h?.())},[r,u,m,h]),E=S(async()=>{if(d)if(g.current)try{await r({url:"stop",method:"post",data:{id:g.current}})}catch{}else p.current?.abort()},[r,d]),N=()=>{const e=a?.[a.length-1];e&&e.id&&2===e.status&&x(e.id)};return M(()=>(N(),()=>{p.current&&p.current.abort()}),[]),M(()=>{s!=f.current&&(f.current=s,p.current&&p.current.abort(),N())},[s]),{send:w,resume:k,stop:E}}({supportStop:w,onEvent:k,onNewConversation:E,onComplete:Q}),{loading:X,request:V}=Ee(),Y=Ne(),[G,Z]=q();M(()=>{const e=(Y?.messages||[]).filter(e=>!!e.query);Z(e.at(-1)?.variables)},[Y?.messages]),M(()=>{!n&&T.length>0&&O([])},[n]),M(()=>{const e=o?.current;if(e){const t=e=>{if(e.target instanceof HTMLAnchorElement&&"#!question"===e.target.hash){e.preventDefault();const t={query:e.target.text};s&&(t.variables={...G,...s.values}),J(t)}};return e.addEventListener("click",t),()=>{e.removeEventListener("click",t)}}},[s,G]);const ee=S(e=>{const t=e.map((e,t)=>{if(e.name)return e;const r=e.type.split("/")[1]||"png";return new File([e],`screenshot-${Date.now()}-${t}.${r}`,{type:e.type})}).filter(e=>!(!_.includes("*")&&!_.includes(P.extname(e.name)))&&!(e.size>20971520)).slice(0,6-T.length);return 0!==t.length&&(O(e=>{e.push(...t.map(e=>({file:e})))}),t.forEach(async e=>{try{const t=new FormData;t.set("file",e);const r=await V({method:"POST",url:"/upload",data:t});O(t=>{const n=t.find(t=>t.file===e);n&&(n.path=r.path)})}catch(t){const r=c(t)?t.message:"unknown error";O(t=>{const n=t.find(t=>t.file===e);n&&(n.error=r)})}}),!0)},[T.length,_,V,O]),te=S(({target:e})=>{e.files&&ee(Array.from(e.files)),e.value=""},[ee]),re=S(e=>{const t=Array.from(e.clipboardData?.files||[]),r=Array.from(e.clipboardData?.items||[]).filter(e=>"file"===e.kind).map(e=>e.getAsFile()).filter(e=>!!e),n=t.length>0?t:r;0!==n.length&&ee(n)&&e.preventDefault()},[ee]),ne=T.flatMap(({file:e,path:t})=>t?[{name:e.name,size:e.size,path:t}]:[]),ie=S(()=>{if(F||ne.length>0){const e={query:F,files:ne};s&&(e.variables={...G,...s.values}),L&&(e.quote=L),J(e),$.current?.setContent(""),D(""),O([]),C.current?.stop(!0)}},[F,ne,s,G,L]),oe=A(()=>({setQuery(e){$.current?.setContent(e)},setQuote:D,send:J,resume:K,focus(){$.current?.focus()}}),[D,J,K]);if(M(()=>{Y?.setInput?.(oe)},[oe]),z(N,()=>oe,[oe]),s){const t=s.config.filter(e=>!(e.key in(s.values||{}))),r=(e,r=!1)=>!!e&&t.every(t=>{const n=!t.required||e?.[t.key];return!n&&r&&u.error("请完善必填信息"),n});if(t.length>0&&!r(G))return e(et,{children:e(Ze,{children:e(Re,{values:G,variables:t,onSubmit:({formData:e})=>{if(r(e,!0))return Z(e),!0}})})})}return t("div",{className:r,children:[h&&e(Ke,{actions:p,children:h}),t(st,{$focused:B&&!X,children:[T.length>0&&e(rt,{children:T.map(({file:t,error:r,path:n},i)=>{const o=void 0===r&&void 0===n;return e(tt,{name:t.name,size:t.size,error:r,loading:o,onRemove:()=>{O(e=>{const r=e.findIndex(e=>e.file===t);-1!==r&&e.splice(r,1)})}},i)})}),!!L&&t(ot,{children:[e("i",{className:"bi bi-quote"}),e("p",{children:L}),e(H,{onClick:()=>D("")})]}),t(nt,{$minRows:d,children:[y?.({Component:Ve,props:{ref:$,readonly:X||g,autoFocus:f,placeholder:x,minRows:d,maxRows:m,onSubmit:ie,onFocusedChange:U,onQueryChange:I,onPaste:re}})||e(Ve,{ref:$,readonly:X||g,autoFocus:f,placeholder:x,minRows:d,maxRows:m,onSubmit:ie,onFocusedChange:U,onQueryChange:I,onPaste:re}),t(it,{children:[b,n&&e(a,{tooltip:"可上传不超过6个小于20MB的文件",placement:"top",children:t(Se,{disabled:T.length>=6,onClick:()=>j.current?.click(),children:[e("input",{onChange:te,multiple:!0,accept:_.join(","),ref:j,type:"file",hidden:!0}),e("i",{className:"bi bi-file-earmark-arrow-up"})]})}),i&&e(Fe,{ref:C,model:i.model,onResult:e=>{$.current?.setContent(t=>t+e+" ")}}),e(Se,{$fill:X&&w,className:X&&w?"text-danger":"text-primary",disabled:!F&&0===ne.length&&!X||X&&!w,onClick:e=>{e.preventDefault(),X&&w?W():ie()},children:e("i",X&&w?{className:"bi bi-square-fill fs-7"}:{className:"bi bi-send-fill"})})]})]})]})]})});const Ze=n.div`
186
189
  border-radius: var(--bs-border-radius-lg);
187
190
  box-shadow: var(--bs-box-shadow-sm);
188
191
  margin: 1rem;
189
192
  padding: 1rem;
190
193
  width: 100%;
191
194
  max-width: 500px;
192
- `,Ze=n.div`
195
+ `,et=n.div`
193
196
  position: absolute;
194
197
  left: 0;
195
198
  right: 0;
@@ -199,26 +202,26 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
199
202
  display: flex;
200
203
  justify-content: center;
201
204
  align-items: center;
202
- `,et=n(pe)`
205
+ `,tt=n(ge)`
203
206
  width: calc((100% - 0.75rem) / 2);
204
- `,tt=n.div`
207
+ `,rt=n.div`
205
208
  display: flex;
206
209
  flex-wrap: wrap;
207
210
  padding: 0.75rem;
208
211
  gap: 0.75rem;
209
212
  border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color);
210
- `,rt=n.div`
213
+ `,nt=n.div`
211
214
  display: flex;
212
215
  gap: 0.25rem;
213
216
  align-items: ${e=>e.$minRows&&e.$minRows>1?"stretch":"end"};
214
217
  flex-direction: ${e=>e.$minRows&&e.$minRows>1?"column":"row"};
215
- `,nt=n.div`
218
+ `,it=n.div`
216
219
  display: flex;
217
220
  flex-direction: row;
218
221
  justify-content: end;
219
222
  gap: 0.25rem;
220
223
  padding: 0.375rem 0.5rem 0.375rem 0.5rem;
221
- `,it=n.div`
224
+ `,ot=n.div`
222
225
  margin: 0.75rem 0.75rem 0 0.75rem;
223
226
  padding: 4px 8px;
224
227
  display: flex;
@@ -239,12 +242,12 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
239
242
  -webkit-box-orient: vertical;
240
243
  display: -webkit-box;
241
244
  }
242
- `,ot=n.div`
245
+ `,st=n.div`
243
246
  background: #fff;
244
247
  border: var(--bs-border-width) var(--bs-border-style) ${e=>e.$focused?"var(--bs-primary)":"var(--bs-border-color)"};
245
248
  border-radius: var(--bs-border-radius-lg);
246
249
  box-shadow: 0.125rem 0.25rem 0.5rem rgba(0, 0, 0, 0.1);
247
- `;function st(e){return e.map(e=>({id:e.id,query:e.query,quote:e.quote||void 0,files:e.files||void 0,variables:e.variables,chunks:e.chunks.map(({content:e="",node:t,error:r,tools:n=[],reasoning:i})=>({content:e,reasoning:i,error:r,tools:n,node:t})),annotation:e.annotation,stats:{usage:e.usage,latency:e.latency},status:e.status??1}))}function at(e){if((e=e.filter(e=>!!e.trim())).length>3){const t=[...e];let r=e.length-3;for(;r--;){let e=Math.floor(Math.random()*t.length);t.splice(e,1)}e=t}return e}var lt,ct,dt;function ut(){return ut=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},ut.apply(null,arguments)}const mt=e=>j.createElement("svg",ut({xmlns:"http://www.w3.org/2000/svg",width:20,height:10,fill:"#fff",viewBox:"0 0 120 30"},e),lt||(lt=j.createElement("circle",{cx:15,cy:15,r:15,fill:"#3c60ff"},j.createElement("animate",{attributeName:"r",begin:"0s",calcMode:"linear",dur:"0.8s",from:15,repeatCount:"indefinite",to:15,values:"15;9;15"}),j.createElement("animate",{attributeName:"fill-opacity",begin:"0s",calcMode:"linear",dur:"0.8s",from:1,repeatCount:"indefinite",to:1,values:"1;.5;1"}))),ct||(ct=j.createElement("circle",{cx:60,cy:15,r:9,fill:"#3c60ff",fillOpacity:.3},j.createElement("animate",{attributeName:"r",begin:"0s",calcMode:"linear",dur:"0.8s",from:9,repeatCount:"indefinite",to:9,values:"9;15;9"}),j.createElement("animate",{attributeName:"fill-opacity",begin:"0s",calcMode:"linear",dur:"0.8s",from:.5,repeatCount:"indefinite",to:.5,values:".5;1;.5"}))),dt||(dt=j.createElement("circle",{cx:105,cy:15,r:15,fill:"#3c60ff"},j.createElement("animate",{attributeName:"r",begin:"0s",calcMode:"linear",dur:"0.8s",from:15,repeatCount:"indefinite",to:15,values:"15;9;15"}),j.createElement("animate",{attributeName:"fill-opacity",begin:"0s",calcMode:"linear",dur:"0.8s",from:1,repeatCount:"indefinite",to:1,values:"1;.5;1"}))));function ht(e){if(!e)return"";if("string"==typeof e)return e;if("image"===e.type){return`![](${y(e.image)})`}return""}const pt=function(e,t,r){function n(t){return t!==ne.leftSquareBracket?(e.exit("citeMarker"),e.enter("citeData"),e.enter(ie.chunkString,{contentType:"string"}),i(t)):(e.consume(t),n)}function i(n){return n===ne.rightSquareBracket?(e.exit(ie.chunkString),e.exit("citeData"),e.enter("citeMarker"),function(n){if(n!==ne.rightSquareBracket)return r(n);return e.consume(n),e.exit("citeMarker"),e.exit("cite"),t(n)}(n)):oe(n)||n===ne.eof||n>57||n<48?r(n):(e.consume(n),i)}return function(t){return t!==ne.leftSquareBracket?r(t):(e.enter("cite"),e.enter("citeMarker"),n(t))}},gt=function(){const e=this.data();e.micromarkExtensions.push({text:{[ne.leftSquareBracket]:{tokenize:pt}}}),e.fromMarkdownExtensions.push({enter:{cite:function(e){this.enter({type:"cite",data:{hName:"cite",hChildren:[{type:"text",value:""}]}},e)},citeData:function(){this.buffer()}},exit:{cite:function(e){this.exit(e)},citeData:function(){const e=this.resume();this.stack[this.stack.length-1].data.hChildren[0].value=e}}})},ft=x.Image,bt={pre:({children:r,node:n})=>{if(!n)return null;const[i,o]=q(!1),s=A(()=>{const e=n.children[0];return"element"===(t=e).type&&"code"===t.tagName&&!!e.properties?.className?.includes("language-svg");var t},[n]);M(()=>{s&&o(s)},[s]);const a=A(()=>V(n),[n]);return e(Et,{children:[e(kt,{children:[!i&&t(w,{tooltip:!1,as:wt,content:a}),s&&i&&t(wt,{onClick:()=>{const e=new Blob([a],{type:"image/svg+xml"}),t=URL.createObjectURL(e),r=document.createElement("a");r.href=t,r.download="image.svg",r.click(),URL.revokeObjectURL(t)},children:"下载"}),s&&t(wt,{onClick:()=>o(!i),children:i?"源码":"预览"})]}),s&&i?t("div",{dangerouslySetInnerHTML:{__html:a}}):t("pre",{children:r})]})},a:({node:e,href:r,...n})=>{const i=r?.startsWith("http")?"_blank":"_self";return t("a",{...n,href:r,target:i})},img:({node:e,...r})=>t(ft,{...r})},vt=[[re,{singleDollarTextMath:!1}],te,ee],yt=[Z,[G,{detect:!1,ignoreMissing:!0}]],xt=L(F(({content:e,components:r,cite:n},i)=>{e=e.replace(/\\\(\s(.+?)\s\\\)/g,"$$$$ $1 $$$$");const o=A(()=>{const e={...bt,...r};return n&&(e.cite=n),e},[r,n]),s=A(()=>n?[...vt,gt]:vt,[n]);return t(Nt,{ref:i,children:t(Y,{remarkPlugins:s,rehypePlugins:yt,components:o,children:e})})}),X),wt=n.div`
250
+ `;function at(e){return e.map(e=>({id:e.id,query:e.query,quote:e.quote||void 0,files:e.files||void 0,variables:e.variables,chunks:e.chunks.map(({content:e="",node:t,error:r,tools:n=[],reasoning:i})=>({content:e,reasoning:i,error:r,tools:n,node:t})),annotation:e.annotation,stats:{usage:e.usage,latency:e.latency},status:e.status??1}))}function lt(e){if((e=e.filter(e=>!!e.trim())).length>3){const t=[...e];let r=e.length-3;for(;r--;){let e=Math.floor(Math.random()*t.length);t.splice(e,1)}e=t}return e}var ct,dt,ut;function mt(){return mt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},mt.apply(null,arguments)}const ht=e=>j.createElement("svg",mt({xmlns:"http://www.w3.org/2000/svg",width:20,height:10,fill:"#fff",viewBox:"0 0 120 30"},e),ct||(ct=j.createElement("circle",{cx:15,cy:15,r:15,fill:"#3c60ff"},j.createElement("animate",{attributeName:"r",begin:"0s",calcMode:"linear",dur:"0.8s",from:15,repeatCount:"indefinite",to:15,values:"15;9;15"}),j.createElement("animate",{attributeName:"fill-opacity",begin:"0s",calcMode:"linear",dur:"0.8s",from:1,repeatCount:"indefinite",to:1,values:"1;.5;1"}))),dt||(dt=j.createElement("circle",{cx:60,cy:15,r:9,fill:"#3c60ff",fillOpacity:.3},j.createElement("animate",{attributeName:"r",begin:"0s",calcMode:"linear",dur:"0.8s",from:9,repeatCount:"indefinite",to:9,values:"9;15;9"}),j.createElement("animate",{attributeName:"fill-opacity",begin:"0s",calcMode:"linear",dur:"0.8s",from:.5,repeatCount:"indefinite",to:.5,values:".5;1;.5"}))),ut||(ut=j.createElement("circle",{cx:105,cy:15,r:15,fill:"#3c60ff"},j.createElement("animate",{attributeName:"r",begin:"0s",calcMode:"linear",dur:"0.8s",from:15,repeatCount:"indefinite",to:15,values:"15;9;15"}),j.createElement("animate",{attributeName:"fill-opacity",begin:"0s",calcMode:"linear",dur:"0.8s",from:1,repeatCount:"indefinite",to:1,values:"1;.5;1"}))));function pt(e){if(!e)return"";if("string"==typeof e)return e;if("image"===e.type){return`![](${y(e.image)})`}return""}const gt=function(e,t,r){function n(t){return t!==ne.leftSquareBracket?(e.exit("citeMarker"),e.enter("citeData"),e.enter(ie.chunkString,{contentType:"string"}),i(t)):(e.consume(t),n)}function i(n){return n===ne.rightSquareBracket?(e.exit(ie.chunkString),e.exit("citeData"),e.enter("citeMarker"),function(n){if(n!==ne.rightSquareBracket)return r(n);return e.consume(n),e.exit("citeMarker"),e.exit("cite"),t(n)}(n)):oe(n)||n===ne.eof||n>57||n<48?r(n):(e.consume(n),i)}return function(t){return t!==ne.leftSquareBracket?r(t):(e.enter("cite"),e.enter("citeMarker"),n(t))}},ft=function(){const e=this.data();e.micromarkExtensions.push({text:{[ne.leftSquareBracket]:{tokenize:gt}}}),e.fromMarkdownExtensions.push({enter:{cite:function(e){this.enter({type:"cite",data:{hName:"cite",hChildren:[{type:"text",value:""}]}},e)},citeData:function(){this.buffer()}},exit:{cite:function(e){this.exit(e)},citeData:function(){const e=this.resume();this.stack[this.stack.length-1].data.hChildren[0].value=e}}})},bt=x.Image,vt={pre:({children:r,node:n})=>{if(!n)return null;const[i,o]=q(!1),s=A(()=>{const e=n.children[0];return"element"===(t=e).type&&"code"===t.tagName&&!!e.properties?.className?.includes("language-svg");var t},[n]);M(()=>{s&&o(s)},[s]);const a=A(()=>V(n),[n]);return t(Nt,{children:[t(Et,{children:[!i&&e(w,{tooltip:!1,as:kt,content:a}),s&&i&&e(kt,{onClick:()=>{const e=new Blob([a],{type:"image/svg+xml"}),t=URL.createObjectURL(e),r=document.createElement("a");r.href=t,r.download="image.svg",r.click(),URL.revokeObjectURL(t)},children:"下载"}),s&&e(kt,{onClick:()=>o(!i),children:i?"源码":"预览"})]}),s&&i?e("div",{dangerouslySetInnerHTML:{__html:a}}):e("pre",{children:r})]})},a:({node:t,href:r,...n})=>{const i=r?.startsWith("http")?"_blank":"_self";return e("a",{...n,href:r,target:i})},img:({node:t,...r})=>e(bt,{...r})},yt=[[re,{singleDollarTextMath:!1}],te,ee],xt=[Z,[G,{detect:!1,ignoreMissing:!0}]],wt=L(F(({content:t,components:r,cite:n},i)=>{t=t.replace(/\\\(\s(.+?)\s\\\)/g,"$$$$ $1 $$$$");const o=A(()=>{const e={...vt,...r};return n&&(e.cite=n),e},[r,n]),s=A(()=>n?[...yt,ft]:yt,[n]);return e(jt,{ref:i,children:e(Y,{remarkPlugins:s,rehypePlugins:xt,components:o,children:t})})}),X),kt=n.div`
248
251
  cursor: pointer;
249
252
  padding: 2px 10px;
250
253
  background-color: #303030;
@@ -254,7 +257,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
254
257
  font-size: 12px;
255
258
  font-family: initial;
256
259
  user-select: none;
257
- `,kt=n.div`
260
+ `,Et=n.div`
258
261
  position: absolute;
259
262
  right: 10px;
260
263
  top: 1em;
@@ -268,17 +271,17 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
268
271
  &:hover {
269
272
  opacity: 1;
270
273
  }
271
- `,Et=n.div`
274
+ `,Nt=n.div`
272
275
  position: relative;
273
276
 
274
277
  &:hover {
275
- ${kt} {
278
+ ${Et} {
276
279
  pointer-events: all;
277
280
  transform: translateX(0px);
278
281
  opacity: 0.7;
279
282
  }
280
283
  }
281
- `,Nt=n.div`
284
+ `,jt=n.div`
282
285
  -ms-text-size-adjust: 100%;
283
286
  -webkit-text-size-adjust: 100%;
284
287
  line-height: 1.8;
@@ -548,7 +551,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
548
551
  .hljs-strong {
549
552
  font-weight: 700;
550
553
  }
551
- `;var jt=F(function({children:e,tooltip:r,onClick:n,disabled:i,...o},a){i&&(n=void 0);const l=t(Ct,{ref:a,onClick:n,$disabled:i,...o,children:e});return r?t(s,{tooltip:r,placement:"top",children:l}):l});const Ct=n.div`
554
+ `;var Ct=F(function({children:t,tooltip:r,onClick:n,disabled:i,...o},s){i&&(n=void 0);const l=e($t,{ref:s,onClick:n,$disabled:i,...o,children:t});return r?e(a,{tooltip:r,placement:"top",children:l}):l});const $t=n.div`
552
555
  align-items: center;
553
556
  justify-content: center;
554
557
  border-radius: .375rem;
@@ -563,7 +566,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
563
566
  height: 1.875rem;
564
567
  overflow: hidden;
565
568
 
566
- ${e=>e.$disabled&&i`
569
+ ${e=>e.$disabled&&o`
567
570
  color: var(--bs-gray-400) !important;
568
571
  `}
569
572
  .bi {
@@ -573,7 +576,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
573
576
  line-height: 1.75rem;
574
577
  text-align: center;
575
578
 
576
- ${e=>!e.$disabled&&i`
579
+ ${e=>!e.$disabled&&o`
577
580
  &:hover {
578
581
  color: var(--bs-dark);
579
582
  background-color: var(--bs-gray-200);
@@ -581,7 +584,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
581
584
  `}
582
585
 
583
586
  }
584
- `,$t=C(null);var Rt=$t.Provider;const St=x.Image;function Mt({src:e,...r}){const{imageResolver:n}=Ne();return n&&e&&(e=n(e)),t(qt,{children:t(St,{src:e,...r})},e)}const qt=n.div`
587
+ `,Rt=C(null);var St=Rt.Provider;const Mt=x.Image;function qt({src:t,...r}){const{imageResolver:n}=je();return n&&t&&(t=n(t)),e(Ft,{children:e(Mt,{src:t,...r})},t)}const Ft=n.div`
585
588
  margin-bottom: .5rem;
586
589
  margin-top: .5rem;
587
590
  border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color);
@@ -606,7 +609,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
606
609
  max-height: 100%;
607
610
  max-width: 100%;
608
611
  }
609
- `,Ft=C(null);function At(){const e=$(Ft);if(!e)throw new Error("useContext must be used within a Provider");return e}function zt({children:e,...r}){return t(Ft.Provider,{value:r,children:e})}function It(e){const[t,r]=q(e);return M(()=>{r(e)},[e]),[t,r]}function Lt({description:r,options:n}){const{resume:i,disabled:o,response:s}=At(),[a,l]=It(s?.result),c=o||void 0!==a;return e(Dt,{children:[r&&t(Pt,{children:r}),n.map((e,r)=>t(Tt,{$selected:a===e,$disabled:c,onClick:()=>(e=>{c||(l(e),i(e))})(e),children:e},r))]})}const Dt=n.div`
612
+ `,At=C(null);function zt(){const e=$(At);if(!e)throw new Error("useContext must be used within a Provider");return e}function It({children:t,...r}){return e(At.Provider,{value:r,children:t})}function Lt(e){const[t,r]=q(e);return M(()=>{r(e)},[e]),[t,r]}function Dt({description:r,options:n}){const{resume:i,disabled:o,response:s}=zt(),[a,l]=Lt(s?.result),c=o||void 0!==a;return t(Pt,{children:[r&&e(Tt,{children:r}),n.map((t,r)=>e(Ot,{$selected:a===t,$disabled:c,onClick:()=>(e=>{c||(l(e),i(e))})(t),children:t},r))]})}const Pt=n.div`
610
613
  display: flex;
611
614
  flex-direction: column;
612
615
  gap: 0.5rem;
@@ -619,10 +622,10 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
619
622
  &:last-child {
620
623
  margin-bottom: 0;
621
624
  }
622
- `,Pt=n.div`
625
+ `,Tt=n.div`
623
626
  color: var(--bs-secondary);
624
627
  line-height: 1.5;
625
- `,Tt=n.div`
628
+ `,Ot=n.div`
626
629
  padding: 0.375rem 0.75rem;
627
630
  background-color: ${e=>e.$selected?"rgba(var(--bs-primary-rgb), 0.1)":"#FFFFFF"};
628
631
  border: 1px solid ${e=>e.$selected?"rgba(var(--bs-primary-rgb), 0.3)":"var(--bs-border-color)"};
@@ -641,7 +644,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
641
644
  &:active {
642
645
  transform: ${e=>e.$disabled?"none":"scale(0.98)"};
643
646
  }
644
- `;function Ot({description:r,fields:n}){const{resume:i,disabled:o,response:s}=At(),[a,l]=It(void 0!==s),c=o||a,{schema:u,uiSchema:m}=A(()=>{const e={},t=[],r={};for(const i of n)e[i.name]={type:"number"===i.type?"number":"string",title:i.label,default:i.default},i.placeholder&&(r[i.name]={"ui:placeholder":i.placeholder}),"textarea"===i.type?r[i.name]={...r[i.name],"ui:widget":"textarea"}:"select"!==i.type&&"radio"!==i.type||!i.options?"checkbox"===i.type&&i.options?(e[i.name].type="array",e[i.name].uniqueItems=!0,e[i.name].items={type:"string",enum:i.options},r[i.name]={...r[i.name],"ui:widget":"checkboxes","ui:enumNames":i.options,"ui:inline":!0}):"email"===i.type?e[i.name].format="email":"date"===i.type?e[i.name].format="date":"tel"===i.type&&(r[i.name]={...r[i.name],"ui:options":{inputType:"tel"}}):(r[i.name]={...r[i.name],"ui:widget":i.type},e[i.name].enum=i.options,e[i.name].enumNames=i.options),i.required&&t.push(i.name);return{schema:{type:"object",properties:e,required:t},uiSchema:r}},[n]);return e(Ut,{className:"rounded bg-white shadow-sm",children:[r&&t(_t,{children:r}),t(d,{schema:u,uiSchema:m,formData:s,onSubmit:({formData:e})=>{c||(l(!0),i(e))},disabled:c,validate:!0,showErrorList:!1,submitText:a?"已提交":"提交",omitExtraData:!0,children:({submit:e})=>t(Bt,{children:e})})]})}const Bt=n.div`
647
+ `;function Bt({description:r,fields:n}){const{resume:i,disabled:o,response:s}=zt(),[a,l]=Lt(void 0!==s),c=o||a,{schema:u,uiSchema:m}=A(()=>{const e={},t=[],r={};for(const i of n)e[i.name]={type:"number"===i.type?"number":"string",title:i.label,default:i.default},i.placeholder&&(r[i.name]={"ui:placeholder":i.placeholder}),"textarea"===i.type?r[i.name]={...r[i.name],"ui:widget":"textarea"}:"select"!==i.type&&"radio"!==i.type||!i.options?"checkbox"===i.type&&i.options?(e[i.name].type="array",e[i.name].uniqueItems=!0,e[i.name].items={type:"string",enum:i.options},r[i.name]={...r[i.name],"ui:widget":"checkboxes","ui:enumNames":i.options,"ui:inline":!0}):"email"===i.type?e[i.name].format="email":"date"===i.type?e[i.name].format="date":"tel"===i.type&&(r[i.name]={...r[i.name],"ui:options":{inputType:"tel"}}):(r[i.name]={...r[i.name],"ui:widget":i.type},e[i.name].enum=i.options,e[i.name].enumNames=i.options),i.required&&t.push(i.name);return{schema:{type:"object",properties:e,required:t},uiSchema:r}},[n]);return t(_t,{className:"rounded bg-white shadow-sm",children:[r&&e(Ht,{children:r}),e(d,{schema:u,uiSchema:m,formData:s,onSubmit:({formData:e})=>{c||(l(!0),i(e))},disabled:c,validate:!0,showErrorList:!1,submitText:a?"已提交":"提交",omitExtraData:!0,children:({submit:t})=>e(Ut,{children:t})})]})}const Ut=n.div`
645
648
  display: flex;
646
649
  justify-content: flex-end;
647
650
  border-top: 1px solid var(--bs-border-color);
@@ -650,7 +653,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
650
653
  button {
651
654
  padding: .25rem;
652
655
  }
653
- `,Ut=n.div`
656
+ `,_t=n.div`
654
657
  display: flex;
655
658
  flex-direction: column;
656
659
  gap: 0.5rem;
@@ -668,10 +671,10 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
668
671
  &:last-child {
669
672
  margin-bottom: 0;
670
673
  }
671
- `,_t=n.div`
674
+ `,Ht=n.div`
672
675
  color: var(--bs-secondary);
673
676
  line-height: 1.5;
674
- `;function Ht({content:r}){const{resume:n,disabled:i,response:o}=At(),[s,a]=It(void 0!==o),l=i||s;return e(Qt,{className:"rounded bg-white shadow-sm",children:[r&&t(Jt,{children:t(xt,{content:r})}),t(Kt,{children:t(k,{disabled:l,onClick:()=>{l||(a(!0),n("已确认"))},children:s?"已确认":"确认"})})]})}const Qt=n.div`
677
+ `;function Qt({content:r}){const{resume:n,disabled:i,response:o}=zt(),[s,a]=Lt(void 0!==o),l=i||s;return t(Jt,{className:"rounded bg-white shadow-sm",children:[r&&e(Kt,{children:e(wt,{content:r})}),e(Wt,{children:e(k,{disabled:l,onClick:()=>{l||(a(!0),n("已确认"))},children:s?"已确认":"确认"})})]})}const Jt=n.div`
675
678
  display: flex;
676
679
  flex-direction: column;
677
680
  gap: .5rem;
@@ -685,10 +688,10 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
685
688
  &:last-child {
686
689
  margin-bottom: 0;
687
690
  }
688
- `,Jt=n.div`
691
+ `,Kt=n.div`
689
692
  line-height: 1.6;
690
693
  color: var(--bs-body-color);
691
- `,Kt=n.div`
694
+ `,Wt=n.div`
692
695
  display: flex;
693
696
  justify-content: flex-end;
694
697
  border-top: 1px solid var(--bs-border-color);
@@ -697,27 +700,27 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
697
700
  button {
698
701
  padding: .25rem 1.5rem;
699
702
  }
700
- `;function Wt(e){return e instanceof Error&&e.message||String(e)}class Xt extends D{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e,t){this.props.onRenderError(e)}render(){return this.state.hasError?null:this.props.children}}function Vt({suspend:e}){const{readonly:r,input:n}=Ne(),{chunkIndex:i,chunk:o,toolIndex:s,tool:a,isLastMessage:l}=function(){const e=$($t);if(!e)throw new Error("useContext must be used within a Provider");return e}(),c=S(e=>{n?.resume({chunk:i,tool:s,payload:e})},[i,n,s]),d=S(e=>{c({error:Wt(e)})},[c]);let u=null;switch(e.type){case"select":u=t(Lt,{...e.select});break;case"form":u=t(Ot,{...e.form});break;case"confirm":u=t(Ht,{...e.confirm})}const m=a?.response||o.node?.output;return t(zt,{resume:c,disabled:r||!!o.error||!l,response:"(Empty)"===m?void 0:m,children:t(Xt,{onRenderError:d,children:u})})}function Yt({value:e,cite:n}){const i=e=>"string"==typeof e?t(xt,{content:e,cite:n}):"image"===e.type?t(Mt,{src:e.image}):"suspend"===e.type?t(Vt,{suspend:e.suspend}):null;return Array.isArray(e)?t(r,{children:e.map((e,r)=>t(I,{children:i(e)},r))}):i(e)}const Gt=({reasoning:r,loading:n})=>{const[i,o]=q(!1);return M(()=>{n||o(!1)},[n]),t(I,{children:t("div",{className:"mb-2",children:e("div",i?{className:"shadow-sm rounded bg-white fs-7",children:[e("div",{onClick:()=>o(!1),role:"button",className:"d-flex align-items-center p-1 px-2 gap-2",children:[n?t(O,{animation:"border",variant:"primary",size:"sm"}):t("i",{className:"bi bi-check-circle-fill text-success"}),t("span",{className:"text-muted",children:n?"思考中":"已思考"}),t("i",{className:"bi bi-caret-up-fill text-muted"})]}),t("div",{className:"border-top p-2 d-flex flex-column gap-2",children:t("div",{className:"border rounded bg-light p-2",children:t(xt,{content:r})})})]}:{onClick:()=>o(!0),role:"button",className:"d-inline-flex align-items-center shadow-sm rounded bg-white p-1 px-2 fs-7 gap-2",children:[n?t(O,{animation:"border",variant:"primary",size:"sm"}):t("i",{className:"bi bi-check-circle-fill text-success"}),t("span",{className:"text-muted",children:n?"思考中":"已思考"}),t("i",{className:"bi bi-caret-down-fill text-muted"})]})})})},Zt=L(e=>{const{renderReasoning:r}=Ne();return r?r({Component:Gt,props:e}):t(Gt,{...e})});function er({tool:r,loading:n}){const{logLevel:i="none",renderToolContent:o}=Ne(),s="response"in r,a=!s&&!n,{response:l,title:c,content:d,showStatus:u,defaultExpanded:m}=A(()=>{const i=(e=>{try{return JSON.parse(e.arguments)}catch(e){return null}})(r),a=t("span",{className:"text-truncate",children:r.title}),l=e("div",{className:"border-top p-2 d-flex flex-column gap-2",children:[e("div",{className:"border rounded bg-light",children:[t("div",{className:"d-flex align-items-center p-1 px-2 fs-7 gap-2",children:t("span",{className:"text-muted",children:"参数"})}),t(rr,{className:"border-top p-2",children:r.arguments})]}),s&&e("div",{className:"border rounded bg-light",children:[t("div",{className:"d-flex align-items-center p-1 px-2 fs-7 gap-2",children:t("span",{className:"text-muted",children:"响应"})}),t(rr,{className:"border-top p-2",children:r.response||"None"})]})]}),c=r.content&&t(Yt,{value:r.content});if(o){const e=o({tool:r,args:i,loading:n});if(e)return{title:null===e.title?null:e.title??a,response:null===e.response?null:e.response??l,content:null===e.content?null:e.content??c,showStatus:e.showStatus??!0,defaultExpanded:e.defaultExpanded??!1}}return{title:a,response:l,content:c,showStatus:!0,defaultExpanded:!1}},[r,o]),[h,p]=q(m),g="all"==i&&null!==l;return e(I,{children:[c&&t("div",{className:"mb-2",children:e(tr,{className:"shadow-sm rounded bg-white fs-7",$open:h,children:[e("div",{onClick:()=>p(g&&!h),role:"button",className:"d-flex align-items-center flex-nowrap p-1 px-2 gap-2",children:[a?t("i",{className:"bi bi-dash-circle-fill text-muted"}):s?r.error?t("i",{className:"bi bi-x-circle-fill text-danger"}):t("i",{className:"bi bi-check-circle-fill text-success"}):t(O,{animation:"border",variant:"primary",size:"sm"}),u&&t("span",{className:"text-muted",children:a?"已取消":s?"已使用":"正在使用"}),c,g&&t("i",h?{className:"bi bi-caret-up-fill text-muted"}:{className:"bi bi-caret-down-fill text-muted"})]}),h&&l]})}),d]})}const tr=n.div`
703
+ `;function Xt(e){return e instanceof Error&&e.message||String(e)}class Vt extends D{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e,t){this.props.onRenderError(e)}render(){return this.state.hasError?null:this.props.children}}function Yt({suspend:t}){const{readonly:r,input:n}=je(),{chunkIndex:i,chunk:o,toolIndex:s,tool:a,isLastMessage:l}=function(){const e=$(Rt);if(!e)throw new Error("useContext must be used within a Provider");return e}(),c=S(e=>{n?.resume({chunk:i,tool:s,payload:e})},[i,n,s]),d=S(e=>{c({error:Xt(e)})},[c]);let u=null;switch(t.type){case"select":u=e(Dt,{...t.select});break;case"form":u=e(Bt,{...t.form});break;case"confirm":u=e(Qt,{...t.confirm})}const m=a?.response||o.node?.output;return e(It,{resume:c,disabled:r||!!o.error||!l,response:"(Empty)"===m?void 0:m,children:e(Vt,{onRenderError:d,children:u})})}function Gt({value:t,cite:n}){const i=t=>"string"==typeof t?e(wt,{content:t,cite:n}):"image"===t.type?e(qt,{src:t.image}):"suspend"===t.type?e(Yt,{suspend:t.suspend}):null;return Array.isArray(t)?e(r,{children:t.map((t,r)=>e(I,{children:i(t)},r))}):i(t)}const Zt=({reasoning:r,loading:n})=>{const[i,o]=q(!1);return M(()=>{n||o(!1)},[n]),e(I,{children:e("div",{className:"mb-2",children:t("div",i?{className:"shadow-sm rounded bg-white fs-7",children:[t("div",{onClick:()=>o(!1),role:"button",className:"d-flex align-items-center p-1 px-2 gap-2",children:[n?e(O,{animation:"border",variant:"primary",size:"sm"}):e("i",{className:"bi bi-check-circle-fill text-success"}),e("span",{className:"text-muted",children:n?"思考中":"已思考"}),e("i",{className:"bi bi-caret-up-fill text-muted"})]}),e("div",{className:"border-top p-2 d-flex flex-column gap-2",children:e("div",{className:"border rounded bg-light p-2",children:e(wt,{content:r})})})]}:{onClick:()=>o(!0),role:"button",className:"d-inline-flex align-items-center shadow-sm rounded bg-white p-1 px-2 fs-7 gap-2",children:[n?e(O,{animation:"border",variant:"primary",size:"sm"}):e("i",{className:"bi bi-check-circle-fill text-success"}),e("span",{className:"text-muted",children:n?"思考中":"已思考"}),e("i",{className:"bi bi-caret-down-fill text-muted"})]})})})},er=L(t=>{const{renderReasoning:r}=je();return r?r({Component:Zt,props:t}):e(Zt,{...t})});function tr({tool:r,loading:n}){const{logLevel:i="none",renderToolContent:o}=je(),s="response"in r,a=!s&&!n,{response:l,title:c,content:d,showStatus:u,defaultExpanded:m}=A(()=>{const i=(e=>{try{return JSON.parse(e.arguments)}catch(e){return null}})(r),a=e("span",{className:"text-truncate",children:r.title}),l=t("div",{className:"border-top p-2 d-flex flex-column gap-2",children:[t("div",{className:"border rounded bg-light",children:[e("div",{className:"d-flex align-items-center p-1 px-2 fs-7 gap-2",children:e("span",{className:"text-muted",children:"参数"})}),e(nr,{className:"border-top p-2",children:r.arguments})]}),s&&t("div",{className:"border rounded bg-light",children:[e("div",{className:"d-flex align-items-center p-1 px-2 fs-7 gap-2",children:e("span",{className:"text-muted",children:"响应"})}),e(nr,{className:"border-top p-2",children:r.response||"None"})]})]}),c=r.content&&e(Gt,{value:r.content});if(o){const e=o({tool:r,args:i,loading:n});if(e)return{title:null===e.title?null:e.title??a,response:null===e.response?null:e.response??l,content:null===e.content?null:e.content??c,showStatus:e.showStatus??!0,defaultExpanded:e.defaultExpanded??!1}}return{title:a,response:l,content:c,showStatus:!0,defaultExpanded:!1}},[r,o]),[h,p]=q(m),g="all"==i&&null!==l;return t(I,{children:[c&&e("div",{className:"mb-2",children:t(rr,{className:"shadow-sm rounded bg-white fs-7",$open:h,children:[t("div",{onClick:()=>p(g&&!h),role:"button",className:"d-flex align-items-center flex-nowrap p-1 px-2 gap-2",children:[a?e("i",{className:"bi bi-dash-circle-fill text-muted"}):s?r.error?e("i",{className:"bi bi-x-circle-fill text-danger"}):e("i",{className:"bi bi-check-circle-fill text-success"}):e(O,{animation:"border",variant:"primary",size:"sm"}),u&&e("span",{className:"text-muted",children:a?"已取消":s?"已使用":"正在使用"}),c,g&&e("i",h?{className:"bi bi-caret-up-fill text-muted"}:{className:"bi bi-caret-down-fill text-muted"})]}),h&&l]})}),d]})}const rr=n.div`
701
704
  width: ${e=>e.$open?"auto":"fit-content"};
702
705
  max-width: 100%;
703
706
  overflow:hidden;
704
- `,rr=n.div`
707
+ `,nr=n.div`
705
708
  white-space: pre-wrap;
706
709
  overflow-y: auto;
707
710
  overflow-x: hidden;
708
711
  max-height: 150px;
709
- `;function nr({node:r}){const[n,i]=q(!1),{nodeIconResolver:o}=Ne(),s=!("latency"in r),a=s?t(O,{animation:"border",variant:"primary",size:"sm"}):r.error?t("i",{className:"bi bi-x-circle-fill text-danger"}):t("i",{className:"bi bi-check-circle-fill text-success"});return e("div",{className:"shadow-sm rounded bg-white fs-7",children:[e(or,{onClick:()=>i(e=>!e),role:"button",className:"d-flex align-items-center p-1 px-2 gap-1",children:[t("i",{className:"bi bi-chevron-down text-muted"}),o?.(r.type),t(sr,{className:"me-2 text-truncate",children:r.title}),t("span",{className:"me-auto"}),!s&&t("span",{className:"text-nowrap text-muted",children:ir(r.latency)}),t("span",{children:a})]}),n&&e("div",{className:"border-top p-2 d-flex flex-column gap-2",children:[e("div",{className:"border rounded bg-light",children:[t("div",{className:"d-flex align-items-center p-1 px-2 fs-7 gap-2",children:t("span",{className:"text-muted",children:"输入"})}),t("div",{className:"border-top p-2 overflow-hidden text-pre-wrap",children:r.input?JSON.stringify(r.input,null,4):"None"})]}),e("div",{className:"border rounded bg-light",children:[t("div",{className:"d-flex align-items-center p-1 px-2 fs-7 gap-2",children:t("span",{className:"text-muted",children:"输出"})}),t("div",{className:"border-top p-2 overflow-hidden text-pre-wrap",children:r.output?JSON.stringify(r.output,null,4):"None"})]})]})]})}const ir=e=>e<1?`${(1e3*e).toFixed(3)} ms`:e>60?`${parseInt(Math.round(e/60).toString())} m ${(e%60).toFixed(3)} s`:`${e.toFixed(3)} s`,or=n.div`
712
+ `;function ir({node:r}){const[n,i]=q(!1),{nodeIconResolver:o}=je(),s=!("latency"in r),a=s?e(O,{animation:"border",variant:"primary",size:"sm"}):r.error?e("i",{className:"bi bi-x-circle-fill text-danger"}):e("i",{className:"bi bi-check-circle-fill text-success"});return t("div",{className:"shadow-sm rounded bg-white fs-7",children:[t(sr,{onClick:()=>i(e=>!e),role:"button",className:"d-flex align-items-center p-1 px-2 gap-1",children:[e("i",{className:"bi bi-chevron-down text-muted"}),o?.(r.type),e(ar,{className:"me-2 text-truncate",children:r.title}),e("span",{className:"me-auto"}),!s&&e("span",{className:"text-nowrap text-muted",children:or(r.latency)}),e("span",{children:a})]}),n&&t("div",{className:"border-top p-2 d-flex flex-column gap-2",children:[t("div",{className:"border rounded bg-light",children:[e("div",{className:"d-flex align-items-center p-1 px-2 fs-7 gap-2",children:e("span",{className:"text-muted",children:"输入"})}),e("div",{className:"border-top p-2 overflow-hidden text-pre-wrap",children:r.input?JSON.stringify(r.input,null,4):"None"})]}),t("div",{className:"border rounded bg-light",children:[e("div",{className:"d-flex align-items-center p-1 px-2 fs-7 gap-2",children:e("span",{className:"text-muted",children:"输出"})}),e("div",{className:"border-top p-2 overflow-hidden text-pre-wrap",children:r.output?JSON.stringify(r.output,null,4):"None"})]})]})]})}const or=e=>e<1?`${(1e3*e).toFixed(3)} ms`:e>60?`${parseInt(Math.round(e/60).toString())} m ${(e%60).toFixed(3)} s`:`${e.toFixed(3)} s`,sr=n.div`
710
713
  svg {
711
714
  flex-shrink: 0;
712
715
  }
713
- `,sr=n.span`
716
+ `,ar=n.span`
714
717
  display: inline-block;
715
- `;function ar({nodes:r,loading:n}){const[i,o]=q(!1),s=r.some(e=>"error"in e),a=n?t(O,{animation:"border",variant:"primary",size:"sm"}):t("i",s?{className:"bi bi-x-circle-fill text-danger"}:{className:"bi bi-check-circle-fill text-success"});return t("div",{className:"mb-2",children:e("div",i?{className:"shadow-sm rounded bg-white fs-7",children:[e("div",{onClick:()=>o(!1),role:"button",className:"d-flex align-items-center p-1 px-2 gap-2",children:[a,t("span",{children:"工作流"}),t("i",{className:"bi bi-caret-up-fill text-muted"})]}),t("div",{className:"border-top p-2 d-flex flex-column gap-1 bg-light bg-opacity-50",children:r.map((e,r)=>t(nr,{node:e},r))})]}:{onClick:()=>o(!0),role:"button",className:"d-inline-flex align-items-center shadow-sm rounded bg-white p-1 px-2 fs-7 gap-2",children:[a,t("span",{children:"工作流"}),t("i",{className:"bi bi-caret-down-fill text-muted"})]})})}const lr=L(F(({chunks:r,loading:n,cite:i,isLast:o=!1,deleted:s=!1},a)=>{const{logLevel:l="none"}=Ne(),c=A(()=>r.flatMap(e=>e.node?[e.node]:[]),[r]);return e(cr,{ref:a,$deleted:s,children:["all"===l&&c.length>0&&t(ar,{loading:n,nodes:c}),r.map((r,s)=>e(I,{children:[r.reasoning&&["stats","all"].includes(l)&&t(Zt,{reasoning:r.reasoning,loading:n&&!r.content&&0===(r.tools||[]).length}),r.content&&t(Rt,{value:{chunkIndex:s,chunk:r,isLastMessage:o},children:t(Yt,{cite:i,value:r.content})}),(r.tools||[]).map((e,i)=>t(Rt,{value:{chunkIndex:s,chunk:r,toolIndex:i,tool:e,isLastMessage:o},children:t(er,{tool:e,loading:n})},i)),r.error&&t(xt,{content:`[${r.error}]`})]},s))]})})),cr=n.div`
716
- ${e=>e.$deleted&&i`
718
+ `;function lr({nodes:r,loading:n}){const[i,o]=q(!1),s=r.some(e=>"error"in e),a=n?e(O,{animation:"border",variant:"primary",size:"sm"}):e("i",s?{className:"bi bi-x-circle-fill text-danger"}:{className:"bi bi-check-circle-fill text-success"});return e("div",{className:"mb-2",children:t("div",i?{className:"shadow-sm rounded bg-white fs-7",children:[t("div",{onClick:()=>o(!1),role:"button",className:"d-flex align-items-center p-1 px-2 gap-2",children:[a,e("span",{children:"工作流"}),e("i",{className:"bi bi-caret-up-fill text-muted"})]}),e("div",{className:"border-top p-2 d-flex flex-column gap-1 bg-light bg-opacity-50",children:r.map((t,r)=>e(ir,{node:t},r))})]}:{onClick:()=>o(!0),role:"button",className:"d-inline-flex align-items-center shadow-sm rounded bg-white p-1 px-2 fs-7 gap-2",children:[a,e("span",{children:"工作流"}),e("i",{className:"bi bi-caret-down-fill text-muted"})]})})}const cr=L(F(({chunks:r,loading:n,cite:i,isLast:o=!1,deleted:s=!1},a)=>{const{logLevel:l="none"}=je(),c=A(()=>r.flatMap(e=>e.node?[e.node]:[]),[r]);return t(dr,{ref:a,$deleted:s,children:["all"===l&&c.length>0&&e(lr,{loading:n,nodes:c}),r.map((r,s)=>t(I,{children:[r.reasoning&&["stats","all"].includes(l)&&e(er,{reasoning:r.reasoning,loading:n&&!r.content&&0===(r.tools||[]).length}),r.content&&e(St,{value:{chunkIndex:s,chunk:r,isLastMessage:o},children:e(Gt,{cite:i,value:r.content})}),(r.tools||[]).map((t,i)=>e(St,{value:{chunkIndex:s,chunk:r,toolIndex:i,tool:t,isLastMessage:o},children:e(tr,{tool:t,loading:n})},i)),r.error&&e(wt,{content:`[${r.error}]`})]},s))]})})),dr=n.div`
719
+ ${e=>e.$deleted&&o`
717
720
  text-decoration-line: line-through;
718
721
  color: var(--bs-secondary);
719
722
  `}
720
- `;class dr{#t;#o=[];#s=0;constructor(){this.#t=new K}speak(){for(this.#t.emit("playing",!0);this.#s<this.#o.length;){const e=this.#o[this.#s],t=new SpeechSynthesisUtterance(e),r=++this.#s;t.onend=()=>{r>=this.#o.length&&this.clear()},t.onerror=()=>{this.clear()},window.speechSynthesis.speak(t)}}clear(){this.#t.emit("playing",!1)}start(e,t=!1){this.#o=Array.isArray(e)?e:[e],t||(window.speechSynthesis.cancel(),this.#s=0),this.speak()}stop(){window.speechSynthesis.cancel(),this.clear()}onPlaying(e){this.#t.on("playing",e)}onSpeaking(e){this.#t.on("speaking",e)}}const ur=new Map;class mr{#r;#t;#o=[];#a=new Map;#l=!1;#s=0;#c=!1;constructor(e){this.#r=e,this.#t=new K}createLoader(e){const t=new Promise(async t=>{try{const{type:r,data:n}=await this.#r(e),i=new Audio(`data:${r};base64,${n}`);this.#a.set(e,i),t(i)}catch{this.#a.delete(e),t(void 0)}});return this.#a.set(e,t),t}async loadAudioData(){this.#c=!0,this.#t.emit("speaking",!0);let e=0;for(;e<this.#o.length;){const t=this.#o[e];!this.#a.has(t)&&this.#c&&await this.createLoader(t),e++}this.#t.emit("speaking",!1),this.#c=!1}waitForAudioLoaded(e){const t=this.#a.get(e);return t instanceof Promise?t:Promise.resolve(t)}async playAudio(e=0){this.#l=!0;const t=await this.waitForAudioLoaded(this.#o[e]);this.#t.emit("playing",!0),t?(ur.set(this,t),t.onpause=async()=>{t.ended?(this.#s++,this.#s<this.#o.length?await this.playAudio(this.#s):this.clear()):this.clear()},await t.play()):this.clear()}clear(){this.#l=!1,this.#c=!1,this.#t.emit("playing",!1),this.#t.emit("speaking",!1),ur.delete(this)}start(e,t=!1){ur.forEach((e,t)=>{t!==this&&(e.pause(),e.currentTime=0)}),this.#o=Array.isArray(e)?e:[e],t||(this.#s=0),this.#c||this.loadAudioData(),this.#l||this.playAudio()}update(e){this.#o=Array.isArray(e)?e:[e]}stop(){const e=ur.get(this);e&&(e.pause(),e.currentTime=0)}onPlaying(e){this.#t.on("playing",e)}onSpeaking(e){this.#t.on("speaking",e)}}function hr({text:e,loading:t,loader:r}){const n=R(),[i,o]=q(!1),[s,a]=q(!1),l=R(t),c=async(i=!1)=>{n.current||(n.current=r?new mr(r):new dr,n.current.onSpeaking(o),n.current.onPlaying(a));let s="";"string"==typeof e?s=e:e.current&&(s=function(e){const t=e.querySelectorAll("p, h1, h2, h3, h4, h5, h6, li:not(:has(p,h1, h2, h3, h4, h5, h6))");return Array.from(t).flatMap(e=>e.textContent?[e.textContent]:[])}(e.current),t&&s.pop()),s&&0!==s.length&&n.current.start(s,i)};return M(()=>{if(l.current&&"string"!=typeof e&&e.current){if(t){const t={childList:!0,subtree:!0},r=new MutationObserver(function(){c(!0)});return r.observe(e.current,t),c(),()=>{r.disconnect()}}c(!0)}},[t]),M(()=>()=>{n.current&&(n.current.stop(),n.current=void 0)},[]),{playing:s,speaking:i,start:c,stop:()=>{n.current&&n.current.stop()}}}function pr({model:r="builtin",voice:n,loading:i,autoplay:o,contentRef:s,avatarRef:a}){const{request:l}=Ne(),c=A(()=>{if("builtin"!==r)return async e=>(await l({url:"/speech",method:"post",data:{model:r,voice:n,input:e}})).audio},[r,n]),{playing:d,speaking:u,start:m,stop:h}=hr({loader:c,text:s,loading:o&&i});let p=null;return a.current&&(u&&(p=se(t(gr,{children:t(O,{size:"sm",variant:"light"})}),a.current)),d&&(p=se(t(gr,{children:t(fr,{className:"bi bi-volume-down-fill text-light"})}),a.current))),e(jt,{disabled:i&&!d,onClick:()=>{d?h():m()},children:[d?t(fr,{className:"bi bi-volume-down-fill"}):u?t(O,{size:"sm",variant:"primary"}):t(fr,{className:"bi bi-volume-down"}),p]})}const gr=n.div`
723
+ `;class ur{#t;#o=[];#s=0;constructor(){this.#t=new K}speak(){for(this.#t.emit("playing",!0);this.#s<this.#o.length;){const e=this.#o[this.#s],t=new SpeechSynthesisUtterance(e),r=++this.#s;t.onend=()=>{r>=this.#o.length&&this.clear()},t.onerror=()=>{this.clear()},window.speechSynthesis.speak(t)}}clear(){this.#t.emit("playing",!1)}start(e,t=!1){this.#o=Array.isArray(e)?e:[e],t||(window.speechSynthesis.cancel(),this.#s=0),this.speak()}stop(){window.speechSynthesis.cancel(),this.clear()}onPlaying(e){this.#t.on("playing",e)}onSpeaking(e){this.#t.on("speaking",e)}}const mr=new Map;class hr{#r;#t;#o=[];#a=new Map;#l=!1;#s=0;#c=!1;constructor(e){this.#r=e,this.#t=new K}createLoader(e){const t=new Promise(async t=>{try{const{type:r,data:n}=await this.#r(e),i=new Audio(`data:${r};base64,${n}`);this.#a.set(e,i),t(i)}catch{this.#a.delete(e),t(void 0)}});return this.#a.set(e,t),t}async loadAudioData(){this.#c=!0,this.#t.emit("speaking",!0);let e=0;for(;e<this.#o.length;){const t=this.#o[e];!this.#a.has(t)&&this.#c&&await this.createLoader(t),e++}this.#t.emit("speaking",!1),this.#c=!1}waitForAudioLoaded(e){const t=this.#a.get(e);return t instanceof Promise?t:Promise.resolve(t)}async playAudio(e=0){this.#l=!0;const t=await this.waitForAudioLoaded(this.#o[e]);this.#t.emit("playing",!0),t?(mr.set(this,t),t.onpause=async()=>{t.ended?(this.#s++,this.#s<this.#o.length?await this.playAudio(this.#s):this.clear()):this.clear()},await t.play()):this.clear()}clear(){this.#l=!1,this.#c=!1,this.#t.emit("playing",!1),this.#t.emit("speaking",!1),mr.delete(this)}start(e,t=!1){mr.forEach((e,t)=>{t!==this&&(e.pause(),e.currentTime=0)}),this.#o=Array.isArray(e)?e:[e],t||(this.#s=0),this.#c||this.loadAudioData(),this.#l||this.playAudio()}update(e){this.#o=Array.isArray(e)?e:[e]}stop(){const e=mr.get(this);e&&(e.pause(),e.currentTime=0)}onPlaying(e){this.#t.on("playing",e)}onSpeaking(e){this.#t.on("speaking",e)}}function pr({text:e,loading:t,loader:r}){const n=R(),[i,o]=q(!1),[s,a]=q(!1),l=R(t),c=async(i=!1)=>{n.current||(n.current=r?new hr(r):new ur,n.current.onSpeaking(o),n.current.onPlaying(a));let s="";"string"==typeof e?s=e:e.current&&(s=function(e){const t=e.querySelectorAll("p, h1, h2, h3, h4, h5, h6, li:not(:has(p,h1, h2, h3, h4, h5, h6))");return Array.from(t).flatMap(e=>e.textContent?[e.textContent]:[])}(e.current),t&&s.pop()),s&&0!==s.length&&n.current.start(s,i)};return M(()=>{if(l.current&&"string"!=typeof e&&e.current){if(t){const t={childList:!0,subtree:!0},r=new MutationObserver(function(){c(!0)});return r.observe(e.current,t),c(),()=>{r.disconnect()}}c(!0)}},[t]),M(()=>()=>{n.current&&(n.current.stop(),n.current=void 0)},[]),{playing:s,speaking:i,start:c,stop:()=>{n.current&&n.current.stop()}}}function gr({model:r="builtin",voice:n,loading:i,autoplay:o,contentRef:s,avatarRef:a}){const{request:l}=je(),c=A(()=>{if("builtin"!==r)return async e=>(await l({url:"/speech",method:"post",data:{model:r,voice:n,input:e}})).audio},[r,n]),{playing:d,speaking:u,start:m,stop:h}=pr({loader:c,text:s,loading:o&&i});let p=null;return a.current&&(u&&(p=se(e(fr,{children:e(O,{size:"sm",variant:"light"})}),a.current)),d&&(p=se(e(fr,{children:e(br,{className:"bi bi-volume-down-fill text-light"})}),a.current))),t(Ct,{disabled:i&&!d,onClick:()=>{d?h():m()},children:[d?e(br,{className:"bi bi-volume-down-fill"}):u?e(O,{size:"sm",variant:"primary"}):e(br,{className:"bi bi-volume-down"}),p]})}const fr=n.div`
721
724
  position: absolute;
722
725
  top: 0;
723
726
  left: 0;
@@ -727,12 +730,12 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
727
730
  align-items: center;
728
731
  justify-content: center;
729
732
  background-color: rgba(0, 0, 0, .3);
730
- `,fr=n.i`
733
+ `,br=n.i`
731
734
 
732
735
  &::before {
733
736
  transform: scale(1.4)
734
737
  }
735
- `,br=L(({message:n,actions:i,setMessage:o,cite:s,speech:a,isLast:l})=>{const{query:c,quote:d,files:u=[],chunks:m,annotation:h,loading:p}=n,{user:g,bot:f,logLevel:b="none",messages:v,renderFileItem:y}=Ne(),x=A(()=>m?m.reduce(function(e,t){const r=Array.isArray(t.content)?t.content.reduce((e,t)=>{const r=ht(t);return r?e+r+"\n":e},""):ht(t.content);return e+r+"\n"+(t.tools||[]).reduce((e,t)=>{if(t.content){const r=ht(t.content);if(r)return e+r+"\n"}return e},"")},""):"",[m]),k=R(null),N=R(null),j=R(null),C=c||u.length>0;return e(r,{children:[C&&e($r,{$reverse:!0,children:[g&&t(Nr,{children:t("img",{src:g.avatar})}),t(jr,{}),e(Cr,{ref:k,children:[c&&t(xt,{content:c}),d&&t(Q,{trigger:"click",container:k,rootClose:!0,placement:"bottom",overlay:t(vr,{body:!0,children:d}),children:t(xr,{children:t(yr,{children:d})})}),u.length>0&&u.map(({name:e,size:r,path:n},i)=>{if(E(n))return t(Mt,{src:`/uploads/${n}`},i);const o={name:e,url:`/uploads/${n}`,size:r};return t(wr,{children:y?y({Component:pe,props:o}):t(pe,{...o})},i)})]})]}),m&&e($r,{children:[f&&t(Nr,{ref:N,children:t("img",{src:f.avatar})}),t(jr,{}),e(Cr,{children:[C&&!1!==i&&e(kr,{children:[t(w,{placement:"top",content:x,as:jt,tooltip:!0}),a&&t(pr,{loading:n.loading,avatarRef:N,contentRef:j,...a}),i?.({Component:jt,message:n,content:x,setMessage:o,messages:v})]}),t(Er,{children:["stats","all"].includes(b)&&n.stats&&e(r,{children:[e("span",{children:["耗时 ",n.stats.latency/1e3," 秒"]}),e("span",{children:["花费 Token ",n.stats.usage]})]})}),t(lr,{ref:j,chunks:m,loading:p,isLast:l,cite:s,deleted:!!h}),h&&e("div",{children:[e("div",{className:"d-flex align-items-center",children:[t("span",{className:"fs-7 text-secondary me-2",children:"标注的答案"}),t("hr",{className:"flex-fill"})]}),t(xt,{content:h.answer})]}),n.loading&&t(mt,{})]})]})]})}),vr=n(J)`
738
+ `,vr=L(({message:n,actions:i,setMessage:o,cite:s,speech:a,isLast:l})=>{const{query:c,quote:d,files:u=[],chunks:m,annotation:h,loading:p}=n,{user:g,bot:f,logLevel:b="none",messages:v,renderFileItem:y}=je(),x=A(()=>m?m.reduce(function(e,t){const r=Array.isArray(t.content)?t.content.reduce((e,t)=>{const r=pt(t);return r?e+r+"\n":e},""):pt(t.content);return e+r+"\n"+(t.tools||[]).reduce((e,t)=>{if(t.content){const r=pt(t.content);if(r)return e+r+"\n"}return e},"")},""):"",[m]),k=R(null),N=R(null),j=R(null),C=c||u.length>0;return t(r,{children:[C&&t(Rr,{$reverse:!0,children:[g&&e(jr,{children:e("img",{src:g.avatar})}),e(Cr,{}),t($r,{ref:k,children:[c&&e(wt,{content:c}),d&&e(Q,{trigger:"click",container:k,rootClose:!0,placement:"bottom",overlay:e(yr,{body:!0,children:d}),children:e(wr,{children:e(xr,{children:d})})}),u.length>0&&u.map(({name:t,size:r,path:n},i)=>{if(E(n))return e(qt,{src:`/uploads/${n}`},i);const o={name:t,url:`/uploads/${n}`,size:r};return e(kr,{children:y?y({Component:ge,props:o}):e(ge,{...o})},i)})]})]}),m&&t(Rr,{children:[f&&e(jr,{ref:N,children:e("img",{src:f.avatar})}),e(Cr,{}),t($r,{children:[C&&!1!==i&&t(Er,{children:[e(w,{placement:"top",content:x,as:Ct,tooltip:!0}),a&&e(gr,{loading:n.loading,avatarRef:N,contentRef:j,...a}),i?.({Component:Ct,message:n,content:x,setMessage:o,messages:v})]}),e(Nr,{children:["stats","all"].includes(b)&&n.stats&&t(r,{children:[t("span",{children:["耗时 ",n.stats.latency/1e3," 秒"]}),t("span",{children:["花费 Token ",n.stats.usage]})]})}),e(cr,{ref:j,chunks:m,loading:p,isLast:l,cite:s,deleted:!!h}),h&&t("div",{children:[t("div",{className:"d-flex align-items-center",children:[e("span",{className:"fs-7 text-secondary me-2",children:"标注的答案"}),e("hr",{className:"flex-fill"})]}),e(wt,{content:h.answer})]}),n.loading&&e(ht,{})]})]})]})}),yr=n(J)`
736
739
  max-width: calc(100% - .875rem * 2);
737
740
  width: calc(100% - .875rem * 2);
738
741
  font-size: 1rem;
@@ -741,20 +744,20 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
741
744
  .popover-body {
742
745
  padding: .5rem .75rem;
743
746
  }
744
- `,yr=n.div`
747
+ `,xr=n.div`
745
748
  overflow: hidden;
746
749
  text-overflow: ellipsis;
747
750
  word-break: break-all;
748
751
  -webkit-line-clamp: 2;
749
752
  -webkit-box-orient: vertical;
750
753
  display: -webkit-box;
751
- `,xr=n.div`
754
+ `,wr=n.div`
752
755
  padding: .5rem .75rem;
753
756
  color: var(--bs-secondary);
754
757
  border-radius: var(--bs-border-radius-lg);
755
758
  background: #FFFFFF;
756
759
  cursor: pointer;
757
- `,wr=n.div`
760
+ `,kr=n.div`
758
761
  width: 100%;
759
762
  margin-bottom: .5rem;
760
763
  margin-top: .5rem;
@@ -766,7 +769,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
766
769
  &:last-child {
767
770
  margin-bottom: 0;
768
771
  }
769
- `,kr=n.div`
772
+ `,Er=n.div`
770
773
  position: absolute;
771
774
  top: -1.1rem;
772
775
  right: 0;
@@ -774,7 +777,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
774
777
  gap: .5rem;
775
778
  opacity: 0;
776
779
  z-index: 1;
777
- `,Er=n.div`
780
+ `,Nr=n.div`
778
781
  position: absolute;
779
782
  bottom: -1.4rem;
780
783
  left: 0;
@@ -787,7 +790,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
787
790
  display: flex;
788
791
  opacity: 0;
789
792
  z-index: 1;
790
- `,Nr=n.div`
793
+ `,jr=n.div`
791
794
  width: 35px;
792
795
  height: 35px;
793
796
  border-radius: 50%;
@@ -798,14 +801,14 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
798
801
  width: 100%;
799
802
  height: 100%;
800
803
  }
801
- `,jr=n.div`
804
+ `,Cr=n.div`
802
805
  width: 0;
803
806
  height: 0;
804
807
  content: "";
805
808
  border: 5px solid transparent;
806
809
  border-right-color: #f3f3f3;
807
810
  transform: translateY(10px);
808
- `,Cr=n.div`
811
+ `,$r=n.div`
809
812
  padding: .875rem;
810
813
  background-color: rgb(243, 243, 243);
811
814
  border-radius: var(--bs-border-radius-lg);
@@ -813,31 +816,31 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
813
816
  position: relative;
814
817
 
815
818
  &:hover {
816
- ${Er}, ${kr} {
819
+ ${Nr}, ${Er} {
817
820
  opacity: 1;
818
821
  }
819
822
  }
820
- `,$r=n.div`
823
+ `,Rr=n.div`
821
824
  display: flex;
822
825
  justify-content: flex-start;
823
826
  padding: 1rem 0 1rem 0;
824
- ${e=>e.$reverse&&i`
827
+ ${e=>e.$reverse&&o`
825
828
  flex-direction: row-reverse;
826
829
 
827
- ${jr} {
830
+ ${Cr} {
828
831
  border-left-color: rgba(var(--bs-primary-rgb), 0.1);
829
832
  border-right-color: transparent;
830
833
  }
831
834
 
832
- ${Cr} {
835
+ ${$r} {
833
836
  background: rgba(var(--bs-primary-rgb), 0.1);
834
837
  }
835
838
  `};
836
- `;function Rr(r){const{placeholder:n,actions:i,cite:o,speech:s,renderItem:a,scrollRef:l}=r,{messages:c,setMessages:d,loading:u,suggestions:m,conversationId:h}=Ne(),p=R(r.loaded),g=S(()=>{const e=l.current;e&&requestAnimationFrame(()=>{e.scrollTo({top:e.scrollHeight})})},[]),f=R(null),{height:b}=ae({ref:f});M(()=>{(u||!p.current)&&c.length>0&&(u&&(p.current=!0),g())},[b,u,p,c]),M(()=>{m.length>0&&g()},[m]),M(()=>{p.current=r.loaded},[h]),M(()=>{const e=f.current;if(e){const t=()=>{p.current=!0};return e.addEventListener("click",t),()=>{e.removeEventListener("click",t)}}},[f]);const v=c.slice(-30);return e(Sr,{ref:f,children:[0===v.length&&n,v.map((e,r)=>{const n={actions:i,cite:o,speech:s,message:e,setMessage:t=>{d(r=>{const n=r.findIndex(t=>t.id===e.id);-1!==n&&t(r[n])})},isLast:r===v.length-1};return a?t(I,{children:a({Component:br,props:n})},r):t(br,{...n},r)}),m.length>0&&t(Mr,{children:m.map((e,r)=>t("a",{href:"#!question",children:e},r))})]})}const Sr=n.div`
839
+ `;function Sr(r){const{placeholder:n,actions:i,cite:o,speech:s,renderItem:a,scrollRef:l}=r,{messages:c,setMessages:d,loading:u,suggestions:m,conversationId:p}=je(),g=R(r.loaded),f=R(!0),b=R(!1);M(()=>{const e=l.current;if(!e)return;const t=()=>{b.current=!0},r=()=>{if(!b.current)return;const t=e.scrollHeight-e.scrollTop-e.clientHeight<50;f.current=t,t&&(b.current=!1)};return e.addEventListener("wheel",t,{passive:!0}),e.addEventListener("touchstart",t,{passive:!0}),e.addEventListener("scroll",r,{passive:!0}),()=>{e.removeEventListener("wheel",t),e.removeEventListener("touchstart",t),e.removeEventListener("scroll",r)}},[l]);const v=h(()=>{if(!f.current)return;const e=l.current;e&&requestAnimationFrame(()=>{e.scrollTo({top:e.scrollHeight})})},200),y=R(null),{height:x}=ae({ref:y});M(()=>{(u||!g.current)&&c.length>0&&(u&&(g.current=!0),v())},[x,u,g,c]),M(()=>{m.length>0&&v()},[m]),M(()=>{g.current=r.loaded},[p]),M(()=>{const e=y.current;if(e){const t=()=>{g.current=!0};return e.addEventListener("click",t),()=>{e.removeEventListener("click",t)}}},[y]);const w=c.slice(-30);return t(Mr,{ref:y,children:[0===w.length&&n,w.map((t,r)=>{const n={actions:i,cite:o,speech:s,message:t,setMessage:e=>{d(r=>{const n=r.findIndex(e=>e.id===t.id);-1!==n&&e(r[n])})},isLast:r===w.length-1};return a?e(I,{children:a({Component:vr,props:n})},r):e(vr,{...n},r)}),m.length>0&&e(qr,{children:m.map((t,r)=>e("a",{href:"#!question",children:t},r))})]})}const Mr=n.div`
837
840
  display: flex;
838
841
  flex-direction: column;
839
842
  flex: 1;
840
- `,Mr=n.div`
843
+ `,qr=n.div`
841
844
  display: flex;
842
845
  flex-direction: column;
843
846
  align-items: flex-start;
@@ -854,18 +857,18 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
854
857
  background: var(--bs-secondary-bg-subtle);
855
858
  }
856
859
  }
857
- `,qr=L(F(({className:r,bot:n,user:i,input:o,logLevel:s,imageResolver:a,nodeIconResolver:l,placeholder:c,actions:d,onboarding:u,conversation:m,cite:h,speech:p,renderItem:g,renderFileItem:f,renderToolContent:b,renderReasoning:y,messages:w,request:k,onReset:E,transformMessages:j=st},C)=>{const $=S(e=>{const t=[];if(u&&!1!==u.enable){const e=at(u.questions||[]);t.push({chunks:[{content:[u.prologue,...e.map(e=>`[${e}](#!question)`)].join("\n"),tools:[]}],loading:u.loading})}return e?t.concat(j(e.messages||[])):w?t.concat(j(w)):t},[u]),[M,F]=q(m?.id),[I,L]=q(),[D,P]=v(()=>$(m)),[T,O]=q(!1),B=R(null),[U,_]=q([]),H=S(e=>{F(e?.id),P($(e)),_([]),O(!1),E?.(e)},[T,$,E]);return z(C,()=>({reset:H}),[H]),t(Ce,{request:A(()=>k?"string"==typeof k?N.create({baseURL:k}):k:N,[k]),bot:n,user:i,logLevel:s,imageResolver:a,nodeIconResolver:l,conversationId:M,setConversationId:F,input:I,setInput:L,messages:D,setMessages:P,suggestions:U,setSuggestions:_,loading:T,setLoading:O,renderFileItem:f,reset:H,readonly:!o,renderToolContent:b,renderReasoning:y,children:t(zr,{className:r,children:e(x,{children:[t(Ar,{ref:B,children:t(Rr,{placeholder:c,cite:h,actions:d,loaded:!o,speech:p,renderItem:g,scrollRef:B})}),o&&t(Fr,{...o,scrollRef:B})]})})})}),X),Fr=n(Ye)`
860
+ `,Fr=L(F(({className:r,bot:n,user:i,input:o,logLevel:s,imageResolver:a,nodeIconResolver:l,placeholder:c,actions:d,onboarding:u,conversation:m,cite:h,speech:p,renderItem:g,renderFileItem:f,renderToolContent:b,renderReasoning:y,messages:w,request:k,onReset:E,transformMessages:j=at},C)=>{const $=S(e=>{const t=[];if(u&&!1!==u.enable){const e=lt(u.questions||[]);t.push({chunks:[{content:[u.prologue,...e.map(e=>`[${e}](#!question)`)].join("\n"),tools:[]}],loading:u.loading})}return e?t.concat(j(e.messages||[])):w?t.concat(j(w)):t},[u]),[M,F]=q(m?.id),[I,L]=q(),[D,P]=v(()=>$(m)),[T,O]=q(!1),B=R(null),[U,_]=q([]),H=S(e=>{F(e?.id),P($(e)),_([]),O(!1),E?.(e)},[T,$,E]);return z(C,()=>({reset:H}),[H]),e($e,{request:A(()=>k?"string"==typeof k?N.create({baseURL:k}):k:N,[k]),bot:n,user:i,logLevel:s,imageResolver:a,nodeIconResolver:l,conversationId:M,setConversationId:F,input:I,setInput:L,messages:D,setMessages:P,suggestions:U,setSuggestions:_,loading:T,setLoading:O,renderFileItem:f,reset:H,readonly:!o,renderToolContent:b,renderReasoning:y,children:e(Ir,{className:r,children:t(x,{children:[e(zr,{ref:B,children:e(Sr,{placeholder:c,cite:h,actions:d,loaded:!o,speech:p,renderItem:g,scrollRef:B})}),o&&e(Ar,{...o,scrollRef:B})]})})})}),X),Ar=n(Ge)`
858
861
  margin: 0 1rem 1rem;
859
- `,Ar=n.div`
862
+ `,zr=n.div`
860
863
  display: flex;
861
864
  flex-direction: column;
862
865
  flex: 1;
863
866
  overflow-y: auto;
864
867
  padding: 0 1rem;
865
868
  margin-bottom: .5rem;
866
- `,zr=n.div`
869
+ `,Ir=n.div`
867
870
  display: flex;
868
871
  flex-direction: column;
869
872
  height: 100%;
870
873
  position: relative;
871
- `,Ir=L(F(({className:e,request:r,disabled:n,supportStop:i,fileTypes:o,speech:s,minRows:a,maxRows:l,toolbar:c,toolbarActions:d,tools:u,autoFocus:m,renderEditableInput:h,placeholder:p,variables:g,onEvent:f,onNewConversation:b},v)=>{const[y,x]=q(!1);return t(je,{request:A(()=>r?"string"==typeof r?N.create({baseURL:r}):r:N,[r]),loading:y,setLoading:x,children:t(Ye,{ref:v,className:e,fileTypes:o,speech:s,variables:g,minRows:a,maxRows:l,toolbar:c,toolbarActions:d,tools:u,disabled:n,autoFocus:m,renderEditableInput:h,placeholder:p,supportStop:i,onEvent:f,onNewConversation:b})})}),X);async function Lr(e){const t=await le().use(de).use(ee).use(te).use(re).use(ue).use(ce).process(e);return String(t)}export{Ae as ActionButton,Ir as ChatInput,lr as Chunks,Xe as EditableInput,pe as FileItem,Re as InputButton,xt as Markdown,qr as MessageBox,$e as VariableForm,me as isToolMessage,Lr as md2html,at as pickQuestions,Ne as useMessageContext,hr as useSynthesis};
874
+ `,Lr=L(F(({className:t,request:r,disabled:n,supportStop:i,fileTypes:o,speech:s,minRows:a,maxRows:l,toolbar:c,toolbarActions:d,tools:u,autoFocus:m,renderEditableInput:h,placeholder:p,variables:g,onEvent:f,onNewConversation:b},v)=>{const[y,x]=q(!1);return e(Ce,{request:A(()=>r?"string"==typeof r?N.create({baseURL:r}):r:N,[r]),loading:y,setLoading:x,children:e(Ge,{ref:v,className:t,fileTypes:o,speech:s,variables:g,minRows:a,maxRows:l,toolbar:c,toolbarActions:d,tools:u,disabled:n,autoFocus:m,renderEditableInput:h,placeholder:p,supportStop:i,onEvent:f,onNewConversation:b})})}),X);async function Dr(e){const t=await le().use(de).use(ee).use(te).use(re).use(ue).use(ce).process(e);return String(t)}export{ze as ActionButton,Lr as ChatInput,cr as Chunks,Ve as EditableInput,he as FileIcon,ge as FileItem,Se as InputButton,wt as Markdown,Fr as MessageBox,Re as VariableForm,me as isToolMessage,Dr as md2html,lt as pickQuestions,je as useMessageContext,pr as useSynthesis};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@topthink/chat",
3
- "version": "1.3.2",
3
+ "version": "1.3.4",
4
4
  "module": "es/index.js",
5
5
  "types": "types/index.d.ts",
6
6
  "files": [
@@ -11,7 +11,7 @@
11
11
  "dependencies": {
12
12
  "@babel/runtime": "^7.11.2",
13
13
  "@breezystack/lamejs": "^1.2.7",
14
- "@topthink/components": "1.2.6",
14
+ "@topthink/components": "1.2.7",
15
15
  "@types/hast": "^3.0.4",
16
16
  "@types/mdast": "^4.0.4",
17
17
  "eventemitter3": "^5.0.1",
@@ -63,7 +63,7 @@
63
63
  },
64
64
  "author": "yunwuxin <tzzhangyajun@qq.com> (https://github.com/yunwuxin)",
65
65
  "license": "MIT",
66
- "gitHead": "593741063bc7655410516b4a207c322bad79948f",
66
+ "gitHead": "4af0c1d9050a12f15849a4b5af4a8d8b71b3c138",
67
67
  "scripts": {
68
68
  "prebuild": "rimraf es types",
69
69
  "build": "rollup -c --environment NODE_ENV:production",
@@ -0,0 +1,5 @@
1
+ export interface FileIconProps {
2
+ name: string;
3
+ className?: string;
4
+ }
5
+ export default function FileIcon({ name, className }: FileIconProps): import("react/jsx-runtime").JSX.Element | null;
@@ -8,6 +8,8 @@ import { ToolRenderOptions, ToolRenderResult } from './context';
8
8
  import { Components } from 'react-markdown';
9
9
  import { FileItemProps } from './file-item';
10
10
  import { ReasoningProps } from './reasoning';
11
+ export { default as FileIcon } from './file-icon';
12
+ export type { FileIconProps } from './file-icon';
11
13
  export interface MessageBoxProps {
12
14
  className?: string;
13
15
  bot?: {
package/types/index.d.ts CHANGED
@@ -11,6 +11,8 @@ export { default as ActionButton } from './components/action-button';
11
11
  export { default as Markdown } from './components/markdown';
12
12
  export { default as VariableForm } from './components/variable-form';
13
13
  export { default as FileItem } from './components/message-box/file-item';
14
+ export { default as FileIcon } from './components/message-box/file-icon';
15
+ export type { FileIconProps } from './components/message-box/file-icon';
14
16
  export { default as pickQuestions } from './utils/pick-questions';
15
17
  export { default as useSynthesis } from './speech/use-synthesis';
16
18
  export { default as md2html } from './utils/md2html';