@topthink/chat 1.2.4 → 1.2.5

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,4 @@
1
- import{jsx as e,jsxs 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,createGlobalStyle as y,getAbsoluteUrl as x,Lightbox as k,Clipboard as w,Button as E,isImageUrl as N,request as j}from"@topthink/components";import*as $ from"react";import{createContext as C,useContext as M,useEffect as S,useState as q,useRef as R,useCallback as z,forwardRef as F,useMemo as I,useImperativeHandle as A,Fragment as D,memo as L}from"react";import*as T from"path";import P from"path";import{Spinner as O,Badge as _,Dropdown as B,FormControl as U,CloseButton as H,OverlayTrigger as J,Popover as Q}from"react-bootstrap";import W from"eventemitter3";import{Editor as X,Delta as G,SKILL_KEY as K,VARS_KEY as V,SEL_VALUE_KEY as Y,SEL_KEY as Z,EditableInputPlugin as ee,SelectorInputPlugin as te,SkillInputPlugin as re,BlockKit as ne,Editable as ie,VARS_VALUE_KEY as oe}from"@block-kit/variable";import"@block-kit/variable/dist/style/index.css";import se from"lodash/isEqual";import{toString as ae}from"hast-util-to-string";import le from"react-markdown";import"katex/dist/katex.min.css";import ce from"rehype-highlight";import de from"rehype-katex";import ue from"remark-breaks";import me from"remark-gfm";import he from"remark-math";import{codes as pe,types as ge}from"micromark-util-symbol";import{markdownLineEnding as fe}from"micromark-util-character";import{createPortal as be}from"react-dom";import ve from"use-resize-observer";import{unified as ye}from"unified";import xe from"rehype-stringify";import ke from"remark-parse";import we from"remark-rehype";function Ee(e,t){return e.name===t}const Ne=C(null);function je(e){const t=M(Ne);if(!t)throw new Error("useContext must be used within a Provider");const{setHandles:r}=t;return S(()=>{if(e)return r(e),()=>{r({})}},[e]),t}function $e({children:t,...r}){const[n,i]=q({});return e(Ne.Provider,{value:{...r,handles:n,setHandles:i},children:t})}const Ce=function({ext:t}){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}},[t]);return r?e("img",{width:30,height:30,src:r}):null},Me=function({className:r,name:n,size:i=0,loading:a,error:l,onRemove:c,onClick:d}){const u=P.extname(n).substring(1),m=t(Fe,{className:r,$error:!!l,onClick:d,children:[t(ze,{children:[e(Ce,{ext:u}),a&&e(O,{variant:"primary"})]}),t(Re,{children:[e("h4",{children:n}),i>0&&e("p",{children:o(i,1)})]}),c&&e(qe,{onClick:e=>{e.preventDefault(),c()},children:e("i",{className:"bi bi-trash3"})})]});return l?e(s,{placement:"top",tooltip:l,children:m}):m};function Se(t){const{renderFileItem:r}=je();return r?r({Component:Me,props:t}):e(Me,{...t})}const qe=n.div`
1
+ import{jsx as e,jsxs 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 $,useEffect as M,useState as S,useRef as F,useCallback as q,forwardRef as R,useMemo as z,useImperativeHandle as I,Fragment as A,memo as D}from"react";import*as L from"path";import P from"path";import{Spinner as T,Badge as O,Dropdown as B,FormControl as U,CloseButton as _,OverlayTrigger as H,Popover as Q}from"react-bootstrap";import J from"eventemitter3";import K from"react-textarea-autosize";import W from"lodash/isEqual";import{toString as X}from"hast-util-to-string";import V from"react-markdown";import"katex/dist/katex.min.css";import Y from"rehype-highlight";import G from"rehype-katex";import Z from"remark-breaks";import ee from"remark-gfm";import te from"remark-math";import{codes as re,types as ne}from"micromark-util-symbol";import{markdownLineEnding as ie}from"micromark-util-character";import{createPortal as oe}from"react-dom";import se from"use-resize-observer";import{unified as ae}from"unified";import le from"rehype-stringify";import ce from"remark-parse";import de from"remark-rehype";function ue(e,t){return e.name===t}const me=C(null);function he(e){const t=$(me);if(!t)throw new Error("useContext must be used within a Provider");const{setHandles:r}=t;return M(()=>{if(e)return r(e),()=>{r({})}},[e]),t}function pe({children:t,...r}){const[n,i]=S({});return e(me.Provider,{value:{...r,handles:n,setHandles:i},children:t})}const ge=function({ext:t}){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}},[t]);return r?e("img",{width:30,height:30,src:r}):null},fe=function({className:r,name:n,size:i=0,loading:a,error:l,onRemove:c,onClick:d}){const u=P.extname(n).substring(1),m=t(we,{className:r,$error:!!l,onClick:d,children:[t(xe,{children:[e(ge,{ext:u}),a&&e(T,{variant:"primary"})]}),t(ye,{children:[e("h4",{children:n}),i>0&&e("p",{children:o(i,1)})]}),c&&e(ve,{onClick:e=>{e.preventDefault(),c()},children:e("i",{className:"bi bi-trash3"})})]});return l?e(s,{placement:"top",tooltip:l,children:m}):m};function be(t){const{renderFileItem:r}=he();return r?r({Component:fe,props:t}):e(fe,{...t})}const ve=n.div`
2
2
  width: 1.75rem;
3
3
  height: 1.75rem;
4
4
  align-items: center;
@@ -13,7 +13,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
13
13
  color: var(--bs-danger);
14
14
  background-color: var(--bs-danger-bg-subtle);
15
15
  }
16
- `,Re=n.div`
16
+ `,ye=n.div`
17
17
  flex: 1;
18
18
  overflow: hidden;
19
19
 
@@ -34,7 +34,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
34
34
  line-height: 20px;
35
35
  margin-bottom: 0;
36
36
  }
37
- `,ze=n.div`
37
+ `,xe=n.div`
38
38
  position: relative;
39
39
  width: 3rem;
40
40
  height: 3rem;
@@ -48,7 +48,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
48
48
  position: absolute;
49
49
  }
50
50
 
51
- `,Fe=n.div`
51
+ `,we=n.div`
52
52
  display: flex;
53
53
  gap: .5rem;
54
54
  padding: .5rem;
@@ -65,14 +65,14 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
65
65
  ${e=>e.$error&&i`
66
66
  border-color: var(--bs-danger) !important;
67
67
  `}
68
- `,Ie=[".txt",".md",".pdf",".docx",".xlsx",".pptx",".png",".jpg"];function Ae(){const{setMessages:e,setSuggestions:t,setLoading:r,conversationId:n,setConversationId:i,request:o,handles:s,messages:a}=je(),d=R(null),u=R(!1),m=R(n),h=()=>(d.current&&d.current.abort(),d.current=new AbortController,d.current.signal),{onSuccess:p,onComplete:g,onEvent:f}=s,b=z(t=>{if(t.data)if("[DONE]"!=t.data)try{const r=JSON.parse(t.data);r.conversation?(m.current=r.conversation,i(r.conversation)):r.suspend?u.current=!0:r.event?f?.(r.event):e(e=>{const t=e[e.length-1];if(r.chunks){if(t.chunks){const e=r.chunks.index;if(t.chunks[e]||(t.chunks[e]={content:"",reasoning:"",tools:[]}),r.chunks.error)t.chunks[e].error=r.chunks.error;else if(r.chunks.tools){t.chunks[e].tools||(t.chunks[e].tools=[]);const n=r.chunks.tools.index;delete r.chunks.tools.index,t.chunks[e].tools[n]&&"arguments"in r.chunks.tools?t.chunks[e].tools[n].arguments+=r.chunks.tools.arguments:t.chunks[e].tools[n]={...t.chunks[e].tools[n],...r.chunks.tools}}else if(r.chunks.reasoning)t.chunks[e].reasoning+=r.chunks.reasoning;else if(r.chunks.content)if("object"==typeof r.chunks.content){Array.isArray(t.chunks[e].content)||(t.chunks[e].content=[]);const n=r.chunks.content.index,i=r.chunks.content.value;"string"==typeof i?(t.chunks[e].content[n]||(t.chunks[e].content[n]=""),t.chunks[e].content[n]+=i):t.chunks[e].content[n]=i}else t.chunks[e].content+=r.chunks.content;else r.chunks.node&&(t.chunks[e].node={...t.chunks[e].node,...r.chunks.node})}}else r.stats?t.stats=r.stats:r.id&&(t.id=r.id)})}catch(e){console.error(e)}else e(e=>{e[e.length-1].loading=!1})},[s]),v=z(t=>{if(l(t))e(e=>{const t=e[e.length-1];t&&(t.loading=!1)});else{let r="未知错误";c(t)&&(r=401==t.response?.status?"未授权或授权已过期,请刷新页面后重试":"string"==typeof t.errors?t.errors:Object.values(t.errors).join("\n")),e(e=>{const t=e[e.length-1];t.chunks&&(0===t.chunks.length?t.chunks=[{error:r}]:t.chunks[t.chunks.length-1].error=r),t.loading=!1})}},[]),y=z(async()=>{try{const t=h();u.current=!1,r(!0),e(e=>{e[e.length-1].loading=!0,delete e[e.length-1].stats});let n={url:"message",method:"get",params:{conversation:m.current},onMessage:b,signal:t};await o(n),u.current||p?.()}catch(e){v(e)}finally{d.current=null}r(!1),g?.()},[o,s]),x=z(async(n,...i)=>{"string"==typeof n&&(n={query:n,...i});const{query:s,files:a=[],variables:l={},quote:c}=n;if(s||a.length>0){const n=h();u.current=!1,r(!0),t([]),e(e=>{e.push({query:s,quote:c,files:a,variables:l,chunks:[],loading:!0})});try{let e={method:"post",data:{query:s,quote:c,files:a,variables:l,conversation:m.current},onMessage:b,signal:n};await o(e),u.current||p?.()}catch(e){v(e)}finally{d.current=null}r(!1),g?.()}},[o,s]),k=z(async t=>{try{const n=h();u.current=!1,r(!0),e(e=>{e[e.length-1].loading=!0});let i={url:"resume",method:"post",data:{conversation:m.current,chunk:t.chunk,tool:t.tool,payload:t.payload},onMessage:b,signal:n};await o(i),u.current||p?.()}catch(e){v(e)}finally{d.current=null}r(!1),g?.()},[o,s]),w=z(async()=>{try{const e=h();let r={method:"post",url:"/suggestion",data:{conversation:m.current},signal:e};const n=await o(r);t(n)}catch{}finally{d.current=null}},[o]);return S(()=>{const e=a[a.length-1];e&&0==e.chunks?.length&&!e.loading&&y()},[]),S(()=>{if(n!=m.current){m.current=n,d.current&&d.current.abort();const e=a[a.length-1];e&&0==e.chunks?.length&&!e.loading&&y()}},[n]),{send:x,resume:k,suggest:w}}function De({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 Le=n.button`
68
+ `,ke=[".txt",".md",".pdf",".docx",".xlsx",".pptx",".png",".jpg"];function Ee(){const{setMessages:e,setSuggestions:t,setLoading:r,conversationId:n,setConversationId:i,request:o,handles:s,messages:a}=he(),d=F(null),u=F(n),m=()=>(d.current&&d.current.abort(),d.current=new AbortController,d.current.signal),{onComplete:h,onEvent:p}=s,g=q(t=>{if(t.data)if("[DONE]"!=t.data)try{const r=JSON.parse(t.data);r.conversation?(u.current=r.conversation,i(r.conversation)):r.event?p?.(r.event):e(e=>{const t=e[e.length-1];if(r.chunks){if(t.chunks){const e=r.chunks.index;if(t.chunks[e]||(t.chunks[e]={content:"",reasoning:"",tools:[]}),r.chunks.error)t.chunks[e].error=r.chunks.error;else if(r.chunks.tools){t.chunks[e].tools||(t.chunks[e].tools=[]);const n=r.chunks.tools.index;delete r.chunks.tools.index,t.chunks[e].tools[n]&&"arguments"in r.chunks.tools?t.chunks[e].tools[n].arguments+=r.chunks.tools.arguments:t.chunks[e].tools[n]={...t.chunks[e].tools[n],...r.chunks.tools}}else if(r.chunks.reasoning)t.chunks[e].reasoning+=r.chunks.reasoning;else if(r.chunks.content)if("object"==typeof r.chunks.content){Array.isArray(t.chunks[e].content)||(t.chunks[e].content=[]);const n=r.chunks.content.index,i=r.chunks.content.value;"string"==typeof i?(t.chunks[e].content[n]||(t.chunks[e].content[n]=""),t.chunks[e].content[n]+=i):t.chunks[e].content[n]=i}else t.chunks[e].content+=r.chunks.content;else r.chunks.node&&(t.chunks[e].node={...t.chunks[e].node,...r.chunks.node})}}else r.stats?t.stats=r.stats:r.id&&(t.id=r.id)})}catch(e){console.error(e)}else e(e=>{e[e.length-1].loading=!1})},[s]),f=q(t=>{if(l(t))e(e=>{const t=e[e.length-1];t&&(t.loading=!1)});else{let r="未知错误";c(t)&&(r=401==t.response?.status?"未授权或授权已过期,请刷新页面后重试":"string"==typeof t.errors?t.errors:Object.values(t.errors).join("\n")),e(e=>{const t=e[e.length-1];t.chunks&&(0===t.chunks.length?t.chunks=[{error:r}]:t.chunks[t.chunks.length-1].error=r),t.loading=!1})}},[]),b=q(async t=>{try{const n=m();r(!0),e(e=>{e[e.length-1].loading=!0,delete e[e.length-1].stats});let i={url:"message",method:"get",params:{id:t},onMessage:g,signal:n};await o(i)}catch(e){f(e)}finally{d.current=null}r(!1),h?.()},[o,s]),v=q(async(n,...i)=>{"string"==typeof n&&(n={query:n,...i});const{query:s,files:a=[],variables:l={},quote:c}=n;let p=null;if(s||a.length>0){const n=m();r(!0),t([]),e(e=>{e.push({query:s,quote:c,files:a,variables:l,chunks:[],loading:!0})});try{let e={method:"post",data:{query:s,quote:c,files:a,variables:l,conversation:u.current},onMessage:g,signal:n};p=(await o(e)).message??null}catch(e){f(e)}finally{d.current=null}p?await b(p.id):(r(!1),h?.())}},[o,s]),y=q(async t=>{try{const n=m();r(!0),e(e=>{e[e.length-1].loading=!0});let i={url:"resume",method:"post",data:{conversation:u.current,chunk:t.chunk,tool:t.tool,payload:t.payload},onMessage:g,signal:n};await o(i)}catch(e){f(e)}finally{d.current=null}r(!1),h?.()},[o,s]),x=q(async()=>{try{const e=m();let r={method:"post",url:"/suggestion",data:{conversation:u.current},signal:e};const n=await o(r);t(n)}catch{}finally{d.current=null}},[o]);return M(()=>{const e=a[a.length-1];return e&&0==e.chunks?.length&&!e.loading&&b(e.id),()=>{d.current&&d.current.abort()}},[]),M(()=>{if(n!=u.current){u.current=n,d.current&&d.current.abort();const e=a[a.length-1];e&&0==e.chunks?.length&&!e.loading&&b(e.id)}},[n]),{send:v,resume:y,suggest:x}}function Ne({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 je=n.button`
69
69
  color: var(--bs-secondary);
70
70
  cursor: pointer;
71
71
  display: flex;
72
72
  align-items: center;
73
73
  justify-content: center;
74
- width: 1.8rem;
75
- height: 1.8rem;
74
+ width: 1.5rem;
75
+ height: 1.5rem;
76
76
  border-radius: .5rem;
77
77
  outline: none;
78
78
  border: none;
@@ -88,12 +88,12 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
88
88
  background-color: var(--bs-gray-200);
89
89
  }
90
90
 
91
- `;let Te=class{#e;#t;constructor(){this.#t=new W}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)}},Pe=class{#t;#r;#n;#i;constructor(e){this.#r=e,this.#t=new W}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 Oe=F(({onResult:r,model:n="builtin"},i)=>{const{request:o}=je(),a=I(()=>{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 S(()=>()=>{r.current&&(r.current.stop(),r.current=void 0)},[]),{recording:n,transcribing:o,start:async()=>{r.current||(r.current=t?new Pe(t):new Te,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 A(i,()=>({start:l,stop:c}),[l,c]),e(s,{tooltip:d?"停止":"语音输入",placement:"top",children:t(Le,{onMouseDown:e=>{e.preventDefault(),d?c():l()},children:[u&&e(_e,{animation:"border",variant:"primary",size:"sm"}),e("i",d?{className:"bi bi-mic-fill text-danger"}:{className:"bi bi-mic"})]})})}),_e=n(O)`
91
+ `;let Ce=class{#e;#t;constructor(){this.#t=new J}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)}},$e=class{#t;#r;#n;#i;constructor(e){this.#r=e,this.#t=new J}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 Me=R(({onResult:r,model:n="builtin"},i)=>{const{request:o}=he(),a=z(()=>{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=F(),[n,i]=S(!1),[o,s]=S(!1);return M(()=>()=>{r.current&&(r.current.stop(),r.current=void 0)},[]),{recording:n,transcribing:o,start:async()=>{r.current||(r.current=t?new $e(t):new Ce,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 I(i,()=>({start:l,stop:c}),[l,c]),e(s,{tooltip:d?"停止":"语音输入",placement:"top",children:t(je,{onMouseDown:e=>{e.preventDefault(),d?c():l()},children:[u&&e(Se,{animation:"border",variant:"primary",size:"sm"}),e("i",d?{className:"bi bi-mic-fill text-danger"}:{className:"bi bi-mic"})]})})}),Se=n(T)`
92
92
  position: absolute;
93
93
  --bs-spinner-width: .75rem;
94
94
  --bs-spinner-height: .75rem;
95
95
  --bs-spinner-border-width: 0.1em;
96
- `,Be=F(({className:t,children:r,size:n,tooltip:i,placement:o,onClick:a,onMouseDown:l},c)=>{const d=e(Ue,{ref:c,className:t,onClick:a,onMouseDown:l,$size:n,children:r});return i?e(s,{tooltip:i,placement:o,children:d}):d}),Ue=n.div`
96
+ `,Fe=R(({className:t,children:r,size:n,tooltip:i,placement:o,onClick:a,onMouseDown:l},c)=>{const d=e(qe,{ref:c,className:t,onClick:a,onMouseDown:l,$size:n,children:r});return i?e(s,{tooltip:i,placement:o,children:d}):d}),qe=n.div`
97
97
  width: 2rem;
98
98
  height: 2rem;
99
99
  align-items: center;
@@ -117,10 +117,10 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
117
117
  &:hover {
118
118
  background-color: var(--bs-secondary-bg-subtle);
119
119
  }
120
- `;function He(){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 S(()=>{m(l)},[l]),t(r,{children:[e(Be,{tooltip:"历史记录",placement:"top",onClick:()=>a(!0),children:e("i",{className:"bi bi-clock-history"})}),e(p,{show:s,onHide:()=>{a(!1)},placement:"end",headerAs:Ge,header:t(r,{children:[e("span",{children:"聊天历史记录"}),e(Ke,{children:e(U,{type:"search",placeholder:"搜索聊天记录...",value:l,onChange:e=>c(e.target.value),autoFocus:!0})})]}),bodyAs:Je,children:s&&e(Xe,{children:e(We,{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)=>t(D,{children:[l>0&&e("hr",{className:"mx-2 my-2"}),t(Qe,{children:[o===s.id&&e(_,{bg:"secondary",children:"当前"}),e("span",{className:"overflow-hidden text-truncate flex-fill",onClick:()=>{i(s),a(!1)},children:s.title||"未命名对话"}),t(B,{align:"end",children:[e(B.Toggle,{size:"sm",className:"no-caret",as:Be,children:e("i",{className:"bi bi-three-dots-vertical"})}),t(B.Menu,{children:[e(g,{buttonProps:{as:B.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:B.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)})},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 Je=n.div`
120
+ `;function Re(){const{request:n,reset:i,conversationId:o}=he(),[s,a]=S(!1),[l,c]=S(""),[d,u]=S(""),m=h(e=>{u(e)},500);return M(()=>{m(l)},[l]),t(r,{children:[e(Fe,{tooltip:"历史记录",placement:"top",onClick:()=>a(!0),children:e("i",{className:"bi bi-clock-history"})}),e(p,{show:s,onHide:()=>{a(!1)},placement:"end",headerAs:Le,header:t(r,{children:[e("span",{children:"聊天历史记录"}),e(Pe,{children:e(U,{type:"search",placeholder:"搜索聊天记录...",value:l,onChange:e=>c(e.target.value),autoFocus:!0})})]}),bodyAs:ze,children:s&&e(De,{children:e(Ae,{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)=>t(A,{children:[l>0&&e("hr",{className:"mx-2 my-2"}),t(Ie,{children:[o===s.id&&e(O,{bg:"secondary",children:"当前"}),e("span",{className:"overflow-hidden text-truncate flex-fill",onClick:()=>{i(s),a(!1)},children:s.title||"未命名对话"}),t(B,{align:"end",children:[e(B.Toggle,{size:"sm",className:"no-caret",as:Fe,children:e("i",{className:"bi bi-three-dots-vertical"})}),t(B.Menu,{children:[e(g,{buttonProps:{as:B.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:B.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)})},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 ze=n.div`
121
121
  padding: 0;
122
122
  overflow: hidden;
123
- `,Qe=n.div`
123
+ `,Ie=n.div`
124
124
  gap: .5rem;
125
125
  display: flex;
126
126
  cursor: pointer;
@@ -139,40 +139,50 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
139
139
  display: block;
140
140
  }
141
141
  }
142
- `,We=n(m)`
142
+ `,Ae=n(m)`
143
143
  display: flex;
144
144
  flex-direction: column;
145
145
  padding: .5rem;
146
- `,Xe=n.div`
146
+ `,De=n.div`
147
147
  height: 100%;
148
148
  overflow-y: auto;
149
- `,Ge=n.div`
149
+ `,Le=n.div`
150
150
  display: flex;
151
151
  align-items: center;
152
152
  justify-content: space-between;
153
153
  gap: 0.5rem;
154
154
  flex: 1;
155
155
  margin-right: .5rem;
156
- `,Ke=n.div`
156
+ `,Pe=n.div`
157
157
  display: flex;
158
158
  align-items: center;
159
159
  gap: 0.5rem;
160
- `;var Ve;function Ye(){return Ye=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},Ye.apply(null,arguments)}const Ze=e=>$.createElement("svg",Ye({width:"1em",height:"1em",fill:"currentColor",viewBox:"0 0 256 256"},e),Ve||(Ve=$.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 et(){const{reset:t}=je();return e(Be,{className:"text-primary",tooltip:"新会话",placement:"top",onClick:t,children:e(Ze,{})})}function tt({children:r}){return t(nt,{children:[r,t(rt,{children:[e(He,{}),e(et,{})]})]})}const rt=n.div`
160
+ `;var Te;function Oe(){return Oe=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},Oe.apply(null,arguments)}const Be=e=>j.createElement("svg",Oe({width:"1em",height:"1em",fill:"currentColor",viewBox:"0 0 256 256"},e),Te||(Te=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 Ue(){const{reset:t}=he();return e(Fe,{className:"text-primary",tooltip:"新会话",placement:"top",onClick:t,children:e(Be,{})})}function _e({children:r,actions:n}){return t(Qe,{children:[r,t(He,{children:[n,e(Re,{}),e(Ue,{})]})]})}const He=n.div`
161
161
  display: flex;
162
162
  gap: .25rem;
163
163
  margin-left: auto;
164
- `,nt=n.div`
164
+ `,Qe=n.div`
165
165
  margin-bottom: .5rem;
166
166
  display: flex;
167
167
  padding: 0 .125rem;
168
- `,it=function(e){return e.ops.map(e=>e.attributes?.[oe]||e.attributes?.[Y]||e.insert||"").join("")};var ot=F(function({suggestion:r,fileTypes:n,speech:i,scrollRef:o,variables:a,minRows:l=1,maxRows:d=5,toolbar:m,disabled:h,autoFocus:p,placeholder:g="请输入你的问题, Enter+Shift换行, Enter发送",onEvent:f},b){const y=R(null),x=R(null),k=R(),w=R(()=>{}),[E,N]=q(""),[j,$]=q(""),[C,M]=v([]),[F,D]=q(!1),L=n&&n.length>0?n:Ie,{send:P,resume:O,suggest:_}=Ae(),B=I(()=>{const e=new X({schema:{[V]:{void:!0,inline:!0},[Z]:{void:!0,inline:!0},[K]:{void:!0,inline:!0}}});return e.event.on("focus_capture",()=>D(!0)),e.event.on("blur_capture",()=>D(!1)),e.event.on("keydown_capture",t=>{if("Escape"===t.key){const{ops:t}=e.state.toBlock();t.some(e=>"skill-key"in(e.attributes||{}))&&e.state.setContent(new G)}else"Enter"!==t.key||t.shiftKey||(t.preventDefault(),t.stopPropagation(),k.current?.())}),e.event.on("CONTENT_CHANGE",e=>{N(it(e.current).trim())}),e.event.on("paste",e=>{w.current(e)}),e},[]),U=I(()=>({onSuccess(){r&&_()},onComplete(){requestAnimationFrame(()=>{B.selection.focus()})},onEvent:f}),[r,f]),{messages:J,loading:Q,request:W,setInput:ie}=je(U),[oe,se]=q();S(()=>{const e=J.filter(e=>!!e.query);se(e.at(-1)?.variables)},[J]),S(()=>{!n&&C.length>0&&M([])},[n]),S(()=>{const e=o.current;if(e&&P){const t=e=>{if(e.target instanceof HTMLAnchorElement&&"#!question"===e.target.hash){e.preventDefault();const t={query:e.target.text};a&&(t.variables={...oe,...a.values}),P(t)}};return e.addEventListener("click",t),()=>{e.removeEventListener("click",t)}}},[a,oe]);const ae=z(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=>!(!L.includes("*")&&!L.includes(T.extname(e.name)))&&!(e.size>20971520)).slice(0,6-C.length);return 0!==t.length&&(M(e=>{e.push(...t.map(e=>({file:e})))}),t.forEach(async e=>{try{const t=new FormData;t.set("file",e);const r=await W({method:"POST",url:"/upload",data:t});M(t=>{const n=t.find(t=>t.file===e);n&&(n.path=r.path)})}catch(t){const r=c(t)?t.message:"unknown error";M(t=>{const n=t.find(t=>t.file===e);n&&(n.error=r)})}}),!0)},[C.length,L,W,M]),le=z(({target:e})=>{e.files&&ae(Array.from(e.files)),e.value=""},[ae]),ce=z(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&&ae(n)&&e.preventDefault()},[ae]);S(()=>{w.current=ce},[ce]);const de=C.flatMap(({file:e,path:t})=>t?[{name:e.name,size:e.size,path:t}]:[]),ue=z(()=>{if(E||de.length>0){const e={query:E,files:de};a&&(e.variables={...oe,...a.values}),j&&(e.quote=j),P(e),he(""),$(""),M([]),x.current?.stop(!0)}},[E,de,a,oe,j]);S(()=>{k.current=ue},[ue]);const me=z(e=>{const t={},r={},n=new G;let i=1,o=1,s=0;const a=/\(([^)]+)\)|\[([^\]]+)\]|\{([^}]+)\}/g;let l;for(;null!==(l=a.exec(e));){if(l.index>s){const t=e.substring(s,l.index);t&&n.insert(t)}if(l[1])n.insert(" ",{[K]:l[1].trim()});else if(l[2]){const e=`var-${i}`;t[e]=l[0],n.insert(" ",{[V]:e}),i++}else if(l[3]){const e=l[3].split("|").map(e=>e.trim()),t=`sel-${o}`;r[t]=e,n.insert(" ",{[Z]:t,[Y]:e[0]}),o++}s=a.lastIndex}if(s<e.length){const t=e.substring(s);t&&n.insert(t)}return{delta:n,placeholders:t,selector:r}},[]),he=z(e=>{let t;t="string"==typeof e?e:e(it(B.state.block.toDelta()));const{delta:r,placeholders:n,selector:i}=me(t);B.plugin.register([new ee({placeholders:n}),new te({selector:i}),new re]),B.state.setContent(r),requestAnimationFrame(()=>{B.selection.focus()})},[B,me]),pe=I(()=>({setQuery:he,setQuote:$,send:P,resume:O,editor:B,focus(){B.selection.focus()}}),[he,$,P,O,B]);if(S(()=>{ie(pe)},[pe]),A(b,()=>pe,[pe]),a){const t=a.config.filter(e=>!(e.key in(a.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(oe))return e(at,{children:e(st,{children:e(De,{values:oe,variables:t,onSubmit:({formData:e})=>{if(r(e,!0))return se(e),!0}})})})}return t(gt,{children:[e(ct,{}),m&&e(tt,{children:m}),t(pt,{$focused:F&&!Q,children:[C.length>0&&e(ut,{children:C.map(({file:t,error:r,path:n},i)=>{const o=void 0===r&&void 0===n;return e(lt,{name:t.name,size:t.size,error:r,loading:o,onRemove:()=>{M(e=>{const r=e.findIndex(e=>e.file===t);-1!==r&&e.splice(r,1)})}},i)})}),!!j&&t(ht,{children:[e("i",{className:"bi bi-quote"}),e("p",{children:j}),e(H,{onClick:()=>$("")})]}),t(mt,{children:[e(ne,{editor:B,readonly:Q||h,children:e(dt,{className:"block-kit-editable",autoFocus:p,placeholder:g,$minRows:l,$maxRows:d})}),n&&e(s,{tooltip:"可上传不超过6个小于20MB的文件",placement:"top",children:t(Le,{disabled:C.length>=6,onClick:()=>y.current?.click(),children:[e("input",{onChange:le,multiple:!0,accept:L.join(","),ref:y,type:"file",hidden:!0}),e("i",{className:"bi bi-file-earmark-arrow-up"})]})}),i&&e(Oe,{ref:x,model:i.model,onResult:e=>{he(t=>t+e+" ")}}),e(Le,{className:"text-primary",disabled:!E&&0===de.length,onClick:e=>{e.preventDefault(),ue()},children:e("i",{className:"bi bi-send-fill"})})]})]})]})});const st=n.div`
168
+ `;var Je=R(function({readonly:t,autoFocus:r,placeholder:n,minRows:i,maxRows:o,onSubmit:s,onFocusedChange:a,onQueryChange:l,onPaste:c},d){const u=F(null),[m,h]=S(""),p=q(()=>{const e=u.current;if(!e)return;e.focus();const t=e.value.length;e.setSelectionRange(t,t)},[]),g=q(e=>{const t="string"==typeof e?e:e(m);h(t),l?.(t.trim()),requestAnimationFrame(()=>{p()})},[m,l,p]);return I(d,()=>({setContent:g,focus(){p()}}),[g,p]),e(Ke,{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 Ke=n(K)`
169
+ min-height: calc(1.5em + 1rem);
170
+ width: 100%;
171
+ padding: 0.5rem 0.5rem 0.5rem 0.75rem;
172
+ border: 0;
173
+ outline: none;
174
+ resize: none;
175
+ flex: 1;
176
+ line-height: 1.5;
177
+ background: transparent;
178
+ `;var We=R(function({suggestion:r,fileTypes:n,speech:i,scrollRef:o,variables:a,minRows:l=1,maxRows:d=5,toolbar:m,toolbarActions:h,disabled:p,autoFocus:g,renderEditableInput:f,placeholder:b="请输入你的问题, Enter+Shift换行, Enter发送",onEvent:y},x){const w=F(null),k=F(null),E=F(null),[N,j]=S(""),[C,$]=S(""),[R,A]=v([]),[D,P]=S(!1),T=n&&n.length>0?n:ke,{send:O,resume:B,suggest:U}=Ee(),H=z(()=>({onSuccess(){r&&U()},onComplete(){requestAnimationFrame(()=>{E.current?.focus()})},onEvent:y}),[r,y]),{messages:Q,loading:J,request:K,setInput:W}=he(H),[X,V]=S();M(()=>{const e=Q.filter(e=>!!e.query);V(e.at(-1)?.variables)},[Q]),M(()=>{!n&&R.length>0&&A([])},[n]),M(()=>{const e=o.current;if(e&&O){const t=e=>{if(e.target instanceof HTMLAnchorElement&&"#!question"===e.target.hash){e.preventDefault();const t={query:e.target.text};a&&(t.variables={...X,...a.values}),O(t)}};return e.addEventListener("click",t),()=>{e.removeEventListener("click",t)}}},[a,X]);const Y=q(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=>!(!T.includes("*")&&!T.includes(L.extname(e.name)))&&!(e.size>20971520)).slice(0,6-R.length);return 0!==t.length&&(A(e=>{e.push(...t.map(e=>({file:e})))}),t.forEach(async e=>{try{const t=new FormData;t.set("file",e);const r=await K({method:"POST",url:"/upload",data:t});A(t=>{const n=t.find(t=>t.file===e);n&&(n.path=r.path)})}catch(t){const r=c(t)?t.message:"unknown error";A(t=>{const n=t.find(t=>t.file===e);n&&(n.error=r)})}}),!0)},[R.length,T,K,A]),G=q(({target:e})=>{e.files&&Y(Array.from(e.files)),e.value=""},[Y]),Z=q(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&&Y(n)&&e.preventDefault()},[Y]),ee=R.flatMap(({file:e,path:t})=>t?[{name:e.name,size:e.size,path:t}]:[]),te=q(()=>{if(N||ee.length>0){const e={query:N,files:ee};a&&(e.variables={...X,...a.values}),C&&(e.quote=C),O(e),E.current?.setContent(""),$(""),A([]),k.current?.stop(!0)}},[N,ee,a,X,C]),re=z(()=>({setQuery(e){E.current?.setContent(e)},setQuote:$,send:O,resume:B,focus(){E.current?.focus()}}),[$,O,B]);if(M(()=>{W(re)},[re]),I(x,()=>re,[re]),a){const t=a.config.filter(e=>!(e.key in(a.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(X))return e(Ve,{children:e(Xe,{children:e(Ne,{values:X,variables:t,onSubmit:({formData:e})=>{if(r(e,!0))return V(e),!0}})})})}return t(nt,{children:[m&&e(_e,{actions:h,children:m}),t(rt,{$focused:D&&!J,children:[R.length>0&&e(Ge,{children:R.map(({file:t,error:r,path:n},i)=>{const o=void 0===r&&void 0===n;return e(Ye,{name:t.name,size:t.size,error:r,loading:o,onRemove:()=>{A(e=>{const r=e.findIndex(e=>e.file===t);-1!==r&&e.splice(r,1)})}},i)})}),!!C&&t(tt,{children:[e("i",{className:"bi bi-quote"}),e("p",{children:C}),e(_,{onClick:()=>$("")})]}),t(Ze,{children:[f?.({Component:Je,props:{ref:E,readonly:J||p,autoFocus:g,placeholder:b,minRows:l,maxRows:d,onSubmit:te,onFocusedChange:P,onQueryChange:j,onPaste:Z}})||e(Je,{ref:E,readonly:J||p,autoFocus:g,placeholder:b,minRows:l,maxRows:d,onSubmit:te,onFocusedChange:P,onQueryChange:j,onPaste:Z}),t(et,{children:[n&&e(s,{tooltip:"可上传不超过6个小于20MB的文件",placement:"top",children:t(je,{disabled:R.length>=6,onClick:()=>w.current?.click(),children:[e("input",{onChange:G,multiple:!0,accept:T.join(","),ref:w,type:"file",hidden:!0}),e("i",{className:"bi bi-file-earmark-arrow-up"})]})}),i&&e(Me,{ref:k,model:i.model,onResult:e=>{E.current?.setContent(t=>t+e+" ")}}),e(je,{className:"text-primary",disabled:!N&&0===ee.length,onClick:e=>{e.preventDefault(),te()},children:e("i",{className:"bi bi-send-fill"})})]})]})]})]})});const Xe=n.div`
169
179
  border-radius: var(--bs-border-radius-lg);
170
180
  box-shadow: var(--bs-box-shadow-sm);
171
181
  margin: 1rem;
172
182
  padding: 1rem;
173
183
  width: 100%;
174
184
  max-width: 500px;
175
- `,at=n.div`
185
+ `,Ve=n.div`
176
186
  position: absolute;
177
187
  left: 0;
178
188
  right: 0;
@@ -182,64 +192,25 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
182
192
  display: flex;
183
193
  justify-content: center;
184
194
  align-items: center;
185
- `,lt=n(Se)`
195
+ `,Ye=n(be)`
186
196
  width: calc((100% - 0.75rem) / 2);
187
- `,ct=y`
188
- .editable-selector-options {
189
- border-radius: var(--bs-border-radius) !important;
190
- border: none !important;
191
- box-shadow: var(--bs-box-shadow-sm) !important;
192
- padding: 0.25rem 0 !important;
193
-
194
- & > div {
195
- padding: 0.4rem 1rem !important;
196
-
197
- &:hover {
198
- background-color: var(--bs-tertiary-bg) !important;
199
- }
200
-
201
- &.editable-selector-option-selected {
202
- color: var(--bs-primary) !important;
203
- }
204
- }
205
- }
206
- `,dt=n(ie)`
207
- min-height: calc(${e=>1.5*e.$minRows}em + 1rem);
208
- max-height: calc(${e=>1.5*e.$maxRows}em + 1rem);
209
- overflow-y: auto;
210
- margin: -0.5rem;
211
- padding: 0.5rem;
212
- flex: 1;
213
-
214
- .editable-skill-container {
215
- color: var(--bs-primary);
216
- background: rgba(0, 102, 255, 0.06);
217
-
218
- &:first-child {
219
- margin-left: 0;
220
- }
221
- }
222
-
223
- .editable-selector {
224
- display: inline-flex;
225
- }
226
-
227
- .editable-vars > .block-kit-editable-text,
228
- .editable-selector {
229
- color: var(--bs-primary);
230
- }
231
- `,ut=n.div`
197
+ `,Ge=n.div`
232
198
  display: flex;
233
199
  flex-wrap: wrap;
234
200
  padding: 0.75rem;
235
201
  gap: 0.75rem;
236
202
  border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color);
237
- `,mt=n.div`
203
+ `,Ze=n.div`
238
204
  display: flex;
239
- padding: 0.5rem 0.5rem 0.5rem 0.75rem;
240
205
  gap: 0.25rem;
241
206
  align-items: end;
242
- `,ht=n.div`
207
+ flex-direction: row;
208
+ `,et=n.div`
209
+ display: flex;
210
+ flex-direction: row;
211
+ gap: 0.25rem;
212
+ padding: 0.5rem 0.5rem 0.5rem 0.5rem;
213
+ `,tt=n.div`
243
214
  margin: 0.75rem 0.75rem 0 0.75rem;
244
215
  padding: 4px 8px;
245
216
  display: flex;
@@ -260,14 +231,14 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
260
231
  -webkit-box-orient: vertical;
261
232
  display: -webkit-box;
262
233
  }
263
- `,pt=n.div`
234
+ `,rt=n.div`
264
235
  background: #fff;
265
236
  border: var(--bs-border-width) var(--bs-border-style) ${e=>e.$focused?"var(--bs-primary)":"var(--bs-border-color)"};
266
237
  border-radius: var(--bs-border-radius-lg);
267
238
  box-shadow: 0.125rem 0.25rem 0.5rem rgba(0, 0, 0, 0.1);
268
- `,gt=n.div`
239
+ `,nt=n.div`
269
240
  margin: 0 1rem 1rem;
270
- `;function ft(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}}))}function bt(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 vt,yt,xt;function kt(){return kt=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},kt.apply(null,arguments)}const wt=e=>$.createElement("svg",kt({xmlns:"http://www.w3.org/2000/svg",width:20,height:10,fill:"#fff",viewBox:"0 0 120 30"},e),vt||(vt=$.createElement("circle",{cx:15,cy:15,r:15,fill:"#3c60ff"},$.createElement("animate",{attributeName:"r",begin:"0s",calcMode:"linear",dur:"0.8s",from:15,repeatCount:"indefinite",to:15,values:"15;9;15"}),$.createElement("animate",{attributeName:"fill-opacity",begin:"0s",calcMode:"linear",dur:"0.8s",from:1,repeatCount:"indefinite",to:1,values:"1;.5;1"}))),yt||(yt=$.createElement("circle",{cx:60,cy:15,r:9,fill:"#3c60ff",fillOpacity:.3},$.createElement("animate",{attributeName:"r",begin:"0s",calcMode:"linear",dur:"0.8s",from:9,repeatCount:"indefinite",to:9,values:"9;15;9"}),$.createElement("animate",{attributeName:"fill-opacity",begin:"0s",calcMode:"linear",dur:"0.8s",from:.5,repeatCount:"indefinite",to:.5,values:".5;1;.5"}))),xt||(xt=$.createElement("circle",{cx:105,cy:15,r:15,fill:"#3c60ff"},$.createElement("animate",{attributeName:"r",begin:"0s",calcMode:"linear",dur:"0.8s",from:15,repeatCount:"indefinite",to:15,values:"15;9;15"}),$.createElement("animate",{attributeName:"fill-opacity",begin:"0s",calcMode:"linear",dur:"0.8s",from:1,repeatCount:"indefinite",to:1,values:"1;.5;1"}))));function Et(e){if(!e)return"";if("string"==typeof e)return e;if("image"===e.type){return`![](${x(e.image)})`}return""}const Nt=function(e,t,r){function n(t){return t!==pe.leftSquareBracket?(e.exit("citeMarker"),e.enter("citeData"),e.enter(ge.chunkString,{contentType:"string"}),i(t)):(e.consume(t),n)}function i(n){return n===pe.rightSquareBracket?(e.exit(ge.chunkString),e.exit("citeData"),e.enter("citeMarker"),function(n){if(n!==pe.rightSquareBracket)return r(n);return e.consume(n),e.exit("citeMarker"),e.exit("cite"),t(n)}(n)):fe(n)||n===pe.eof||n>57||n<48?r(n):(e.consume(n),i)}return function(t){return t!==pe.leftSquareBracket?r(t):(e.enter("cite"),e.enter("citeMarker"),n(t))}},jt=function(){const e=this.data();e.micromarkExtensions.push({text:{[pe.leftSquareBracket]:{tokenize:Nt}}}),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}}})},$t=k.Image,Ct={pre:({children:r,node:n})=>{if(!n)return null;const[i,o]=q(!1),s=I(()=>{const e=n.children[0];return"element"===(t=e).type&&"code"===t.tagName&&!!e.properties?.className?.includes("language-svg");var t},[n]);S(()=>{s&&o(s)},[s]);const a=I(()=>ae(n),[n]);return t(Ft,{children:[t(zt,{children:[!i&&e(w,{tooltip:!1,as:Rt,content:a}),s&&i&&e(Rt,{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(Rt,{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($t,{...r})},Mt=[[he,{singleDollarTextMath:!1}],me,ue],St=[de,[ce,{detect:!1,ignoreMissing:!0}]],qt=L(F(({content:t,components:r,cite:n},i)=>{t=t.replace(/\\\(\s(.+?)\s\\\)/g,"$$$$ $1 $$$$");const o=I(()=>{const e={...Ct,...r};return n&&(e.cite=n),e},[r,n]),s=I(()=>n?[...Mt,jt]:Mt,[n]);return e(It,{ref:i,children:e(le,{remarkPlugins:s,rehypePlugins:St,components:o,children:t})})}),se),Rt=n.div`
241
+ `;function it(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}}))}function ot(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 st,at,lt;function ct(){return ct=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},ct.apply(null,arguments)}const dt=e=>j.createElement("svg",ct({xmlns:"http://www.w3.org/2000/svg",width:20,height:10,fill:"#fff",viewBox:"0 0 120 30"},e),st||(st=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"}))),at||(at=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"}))),lt||(lt=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 ut(e){if(!e)return"";if("string"==typeof e)return e;if("image"===e.type){return`![](${y(e.image)})`}return""}const mt=function(e,t,r){function n(t){return t!==re.leftSquareBracket?(e.exit("citeMarker"),e.enter("citeData"),e.enter(ne.chunkString,{contentType:"string"}),i(t)):(e.consume(t),n)}function i(n){return n===re.rightSquareBracket?(e.exit(ne.chunkString),e.exit("citeData"),e.enter("citeMarker"),function(n){if(n!==re.rightSquareBracket)return r(n);return e.consume(n),e.exit("citeMarker"),e.exit("cite"),t(n)}(n)):ie(n)||n===re.eof||n>57||n<48?r(n):(e.consume(n),i)}return function(t){return t!==re.leftSquareBracket?r(t):(e.enter("cite"),e.enter("citeMarker"),n(t))}},ht=function(){const e=this.data();e.micromarkExtensions.push({text:{[re.leftSquareBracket]:{tokenize:mt}}}),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}}})},pt=x.Image,gt={pre:({children:r,node:n})=>{if(!n)return null;const[i,o]=S(!1),s=z(()=>{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=z(()=>X(n),[n]);return t(wt,{children:[t(xt,{children:[!i&&e(w,{tooltip:!1,as:yt,content:a}),s&&i&&e(yt,{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(yt,{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(pt,{...r})},ft=[[te,{singleDollarTextMath:!1}],ee,Z],bt=[G,[Y,{detect:!1,ignoreMissing:!0}]],vt=D(R(({content:t,components:r,cite:n},i)=>{t=t.replace(/\\\(\s(.+?)\s\\\)/g,"$$$$ $1 $$$$");const o=z(()=>{const e={...gt,...r};return n&&(e.cite=n),e},[r,n]),s=z(()=>n?[...ft,ht]:ft,[n]);return e(kt,{ref:i,children:e(V,{remarkPlugins:s,rehypePlugins:bt,components:o,children:t})})}),W),yt=n.div`
271
242
  cursor: pointer;
272
243
  padding: 2px 10px;
273
244
  background-color: #303030;
@@ -277,7 +248,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
277
248
  font-size: 12px;
278
249
  font-family: initial;
279
250
  user-select: none;
280
- `,zt=n.div`
251
+ `,xt=n.div`
281
252
  position: absolute;
282
253
  right: 10px;
283
254
  top: 1em;
@@ -291,17 +262,17 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
291
262
  &:hover {
292
263
  opacity: 1;
293
264
  }
294
- `,Ft=n.div`
265
+ `,wt=n.div`
295
266
  position: relative;
296
267
 
297
268
  &:hover {
298
- ${zt} {
269
+ ${xt} {
299
270
  pointer-events: all;
300
271
  transform: translateX(0px);
301
272
  opacity: 0.7;
302
273
  }
303
274
  }
304
- `,It=n.div`
275
+ `,kt=n.div`
305
276
  -ms-text-size-adjust: 100%;
306
277
  -webkit-text-size-adjust: 100%;
307
278
  line-height: 1.8;
@@ -571,7 +542,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
571
542
  .hljs-strong {
572
543
  font-weight: 700;
573
544
  }
574
- `;var At=F(function({children:t,tooltip:r,onClick:n,disabled:i,...o},a){i&&(n=void 0);const l=e(Dt,{ref:a,onClick:n,$disabled:i,...o,children:t});return r?e(s,{tooltip:r,placement:"top",children:l}):l});const Dt=n.div`
545
+ `;var Et=R(function({children:t,tooltip:r,onClick:n,disabled:i,...o},a){i&&(n=void 0);const l=e(Nt,{ref:a,onClick:n,$disabled:i,...o,children:t});return r?e(s,{tooltip:r,placement:"top",children:l}):l});const Nt=n.div`
575
546
  align-items: center;
576
547
  justify-content: center;
577
548
  border-radius: .375rem;
@@ -604,7 +575,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
604
575
  `}
605
576
 
606
577
  }
607
- `,Lt=C(null);var Tt=Lt.Provider;const Pt=k.Image;function Ot({src:t,...r}){const{imageResolver:n}=je();return n&&t&&(t=n(t)),e(_t,{children:e(Pt,{src:t,...r})},t)}const _t=n.div`
578
+ `,jt=C(null);var Ct=jt.Provider;const $t=x.Image;function Mt({src:t,...r}){const{imageResolver:n}=he();return n&&t&&(t=n(t)),e(St,{children:e($t,{src:t,...r})},t)}const St=n.div`
608
579
  margin-bottom: .5rem;
609
580
  margin-top: .5rem;
610
581
  border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color);
@@ -629,7 +600,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
629
600
  max-height: 100%;
630
601
  max-width: 100%;
631
602
  }
632
- `,Bt=C(null);function Ut(){const e=M(Bt);if(!e)throw new Error("useContext must be used within a Provider");return e}function Ht({children:t,...r}){return e(Bt.Provider,{value:r,children:t})}function Jt({description:r,options:n}){const{resume:i,disabled:o,response:s}=Ut(),[a,l]=q(s?.result),c=o||void 0!==a;return t(Qt,{children:[r&&e(Wt,{children:r}),n.map((t,r)=>e(Xt,{$selected:a===t,$disabled:c,onClick:()=>(e=>{c||(l(e),i(e))})(t),children:t},r))]})}const Qt=n.div`
603
+ `,Ft=C(null);function qt(){const e=$(Ft);if(!e)throw new Error("useContext must be used within a Provider");return e}function Rt({children:t,...r}){return e(Ft.Provider,{value:r,children:t})}function zt({description:r,options:n}){const{resume:i,disabled:o,response:s}=qt(),[a,l]=S(s?.result),c=o||void 0!==a;return t(It,{children:[r&&e(At,{children:r}),n.map((t,r)=>e(Dt,{$selected:a===t,$disabled:c,onClick:()=>(e=>{c||(l(e),i(e))})(t),children:t},r))]})}const It=n.div`
633
604
  display: flex;
634
605
  flex-direction: column;
635
606
  gap: 0.5rem;
@@ -642,10 +613,10 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
642
613
  &:last-child {
643
614
  margin-bottom: 0;
644
615
  }
645
- `,Wt=n.div`
616
+ `,At=n.div`
646
617
  color: var(--bs-secondary);
647
618
  line-height: 1.5;
648
- `,Xt=n.div`
619
+ `,Dt=n.div`
649
620
  padding: 0.375rem 0.75rem;
650
621
  background-color: ${e=>e.$selected?"rgba(var(--bs-primary-rgb), 0.1)":"#FFFFFF"};
651
622
  border: 1px solid ${e=>e.$selected?"rgba(var(--bs-primary-rgb), 0.3)":"var(--bs-border-color)"};
@@ -664,7 +635,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
664
635
  &:active {
665
636
  transform: ${e=>e.$disabled?"none":"scale(0.98)"};
666
637
  }
667
- `;function Gt({description:r,fields:n}){const{resume:i,disabled:o,response:s}=Ut(),[a,l]=q(void 0!==s),c=o||a,{schema:u,uiSchema:m}=I(()=>{const e={},t=[],r={};for(const i of n)e[i.name]={type:"number"===i.type?"number":"string",title:i.label},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(Vt,{className:"rounded bg-white shadow-sm",children:[r&&e(Yt,{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(Kt,{children:t})})]})}const Kt=n.div`
638
+ `;function Lt({description:r,fields:n}){const{resume:i,disabled:o,response:s}=qt(),[a,l]=S(void 0!==s),c=o||a,{schema:u,uiSchema:m}=z(()=>{const e={},t=[],r={};for(const i of n)e[i.name]={type:"number"===i.type?"number":"string",title:i.label},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(Tt,{className:"rounded bg-white shadow-sm",children:[r&&e(Ot,{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(Pt,{children:t})})]})}const Pt=n.div`
668
639
  display: flex;
669
640
  justify-content: flex-end;
670
641
  border-top: 1px solid var(--bs-border-color);
@@ -672,7 +643,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
672
643
  button {
673
644
  padding: .25rem;
674
645
  }
675
- `,Vt=n.div`
646
+ `,Tt=n.div`
676
647
  display: flex;
677
648
  flex-direction: column;
678
649
  gap: 0.5rem;
@@ -690,10 +661,10 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
690
661
  &:last-child {
691
662
  margin-bottom: 0;
692
663
  }
693
- `,Yt=n.div`
664
+ `,Ot=n.div`
694
665
  color: var(--bs-secondary);
695
666
  line-height: 1.5;
696
- `;function Zt({content:r}){const{resume:n,disabled:i,response:o}=Ut(),[s,a]=q(void 0!==o),l=i||s;return t(er,{className:"rounded bg-white shadow-sm",children:[r&&e(tr,{children:e(qt,{content:r})}),e(rr,{children:e(E,{disabled:l,onClick:()=>{l||(a(!0),n("已确认"))},children:s?"已确认":"确认"})})]})}const er=n.div`
667
+ `;function Bt({content:r}){const{resume:n,disabled:i,response:o}=qt(),[s,a]=S(void 0!==o),l=i||s;return t(Ut,{className:"rounded bg-white shadow-sm",children:[r&&e(_t,{children:e(vt,{content:r})}),e(Ht,{children:e(k,{disabled:l,onClick:()=>{l||(a(!0),n("已确认"))},children:s?"已确认":"确认"})})]})}const Ut=n.div`
697
668
  display: flex;
698
669
  flex-direction: column;
699
670
  gap: .5rem;
@@ -707,10 +678,10 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
707
678
  &:last-child {
708
679
  margin-bottom: 0;
709
680
  }
710
- `,tr=n.div`
681
+ `,_t=n.div`
711
682
  line-height: 1.6;
712
683
  color: var(--bs-body-color);
713
- `,rr=n.div`
684
+ `,Ht=n.div`
714
685
  display: flex;
715
686
  justify-content: flex-end;
716
687
  border-top: 1px solid var(--bs-border-color);
@@ -719,7 +690,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
719
690
  button {
720
691
  padding: .25rem 1.5rem;
721
692
  }
722
- `;function nr({suspend:t}){const{readonly:r}=je(),{chunkIndex:n,chunk:i,toolIndex:o,tool:s,isLastMessage:a}=function(){const e=M(Lt);if(!e)throw new Error("useContext must be used within a Provider");return e}(),{resume:l}=Ae(),c=z(e=>{l({chunk:n,tool:o,payload:e})},[]);let d=null;switch(t.type){case"select":d=e(Jt,{...t.select});break;case"form":d=e(Gt,{...t.form});break;case"confirm":d=e(Zt,{...t.confirm})}const u=s?.response||i.node?.output;return e(Ht,{resume:c,disabled:r||!!i.error||!a,response:"(Empty)"===u?void 0:u,children:d})}function ir({value:t,cite:n}){const i=t=>"string"==typeof t?e(qt,{content:t,cite:n}):"image"===t.type?e(Ot,{src:t.image}):"suspend"===t.type?e(nr,{suspend:t.suspend}):null;return Array.isArray(t)?e(r,{children:t.map((t,r)=>e(D,{children:i(t)},r))}):i(t)}const or=({reasoning:r,loading:n})=>{const[i,o]=q(!1);return S(()=>{n||o(!1)},[n]),e(D,{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(qt,{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"})]})})})},sr=L(t=>{const{renderReasoning:r}=je();return r?r({Component:or,props:t}):e(or,{...t})});class ar{#t;#o=[];#s=0;constructor(){this.#t=new W}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 lr=new Map;class cr{#r;#t;#o=[];#a=new Map;#l=!1;#s=0;#c=!1;constructor(e){this.#r=e,this.#t=new W}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?(lr.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),lr.delete(this)}start(e,t=!1){lr.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=lr.get(this);e&&(e.pause(),e.currentTime=0)}onPlaying(e){this.#t.on("playing",e)}onSpeaking(e){this.#t.on("speaking",e)}}function dr({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 cr(r):new ar,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 S(()=>{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]),S(()=>()=>{n.current&&(n.current.stop(),n.current=void 0)},[]),{playing:s,speaking:i,start:c,stop:()=>{n.current&&n.current.stop()}}}function ur({model:r="builtin",voice:n,loading:i,autoplay:o,contentRef:s,avatarRef:a}){const{request:l}=je(),c=I(()=>{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}=dr({loader:c,text:s,loading:o&&i});let p=null;return a.current&&(u&&(p=be(e(mr,{children:e(O,{size:"sm",variant:"light"})}),a.current)),d&&(p=be(e(mr,{children:e(hr,{className:"bi bi-volume-down-fill text-light"})}),a.current))),t(At,{disabled:i&&!d,onClick:()=>{d?h():m()},children:[d?e(hr,{className:"bi bi-volume-down-fill"}):u?e(O,{size:"sm",variant:"primary"}):e(hr,{className:"bi bi-volume-down"}),p]})}const mr=n.div`
693
+ `;function Qt({suspend:t}){const{readonly:r}=he(),{chunkIndex:n,chunk:i,toolIndex:o,tool:s,isLastMessage:a}=function(){const e=$(jt);if(!e)throw new Error("useContext must be used within a Provider");return e}(),{resume:l}=Ee(),c=q(e=>{l({chunk:n,tool:o,payload:e})},[]);let d=null;switch(t.type){case"select":d=e(zt,{...t.select});break;case"form":d=e(Lt,{...t.form});break;case"confirm":d=e(Bt,{...t.confirm})}const u=s?.response||i.node?.output;return e(Rt,{resume:c,disabled:r||!!i.error||!a,response:"(Empty)"===u?void 0:u,children:d})}function Jt({value:t,cite:n}){const i=t=>"string"==typeof t?e(vt,{content:t,cite:n}):"image"===t.type?e(Mt,{src:t.image}):"suspend"===t.type?e(Qt,{suspend:t.suspend}):null;return Array.isArray(t)?e(r,{children:t.map((t,r)=>e(A,{children:i(t)},r))}):i(t)}const Kt=({reasoning:r,loading:n})=>{const[i,o]=S(!1);return M(()=>{n||o(!1)},[n]),e(A,{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(T,{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(vt,{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(T,{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"})]})})})},Wt=D(t=>{const{renderReasoning:r}=he();return r?r({Component:Kt,props:t}):e(Kt,{...t})});class Xt{#t;#o=[];#s=0;constructor(){this.#t=new J}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 Vt=new Map;class Yt{#r;#t;#o=[];#a=new Map;#l=!1;#s=0;#c=!1;constructor(e){this.#r=e,this.#t=new J}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?(Vt.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),Vt.delete(this)}start(e,t=!1){Vt.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=Vt.get(this);e&&(e.pause(),e.currentTime=0)}onPlaying(e){this.#t.on("playing",e)}onSpeaking(e){this.#t.on("speaking",e)}}function Gt({text:e,loading:t,loader:r}){const n=F(),[i,o]=S(!1),[s,a]=S(!1),l=F(t),c=async(i=!1)=>{n.current||(n.current=r?new Yt(r):new Xt,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 Zt({model:r="builtin",voice:n,loading:i,autoplay:o,contentRef:s,avatarRef:a}){const{request:l}=he(),c=z(()=>{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}=Gt({loader:c,text:s,loading:o&&i});let p=null;return a.current&&(u&&(p=oe(e(er,{children:e(T,{size:"sm",variant:"light"})}),a.current)),d&&(p=oe(e(er,{children:e(tr,{className:"bi bi-volume-down-fill text-light"})}),a.current))),t(Et,{disabled:i&&!d,onClick:()=>{d?h():m()},children:[d?e(tr,{className:"bi bi-volume-down-fill"}):u?e(T,{size:"sm",variant:"primary"}):e(tr,{className:"bi bi-volume-down"}),p]})}const er=n.div`
723
694
  position: absolute;
724
695
  top: 0;
725
696
  left: 0;
@@ -729,27 +700,27 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
729
700
  align-items: center;
730
701
  justify-content: center;
731
702
  background-color: rgba(0, 0, 0, .3);
732
- `,hr=n.i`
703
+ `,tr=n.i`
733
704
 
734
705
  &::before {
735
706
  transform: scale(1.4)
736
707
  }
737
- `;function pr({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}=I(()=>{const n=(e=>{try{return JSON.parse(e.arguments)}catch(e){return null}})(r),i=e("span",{className:"text-truncate",children:r.title}),a=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(fr,{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(fr,{className:"border-top p-2",children:r.response||"None"})]})]}),l=r.content&&e(ir,{value:r.content});if(o){const e=o({tool:r,args:n});if(e)return{title:null===e.title?null:e.title??i,response:null===e.response?null:e.response??a,content:null===e.content?null:e.content??l,showStatus:e.showStatus??!0,defaultExpanded:e.defaultExpanded??!1}}return{title:i,response:a,content:l,showStatus:!0,defaultExpanded:!1}},[r,o]),[h,p]=q(m),g="all"==i&&null!==l;return t(D,{children:[c&&e("div",{className:"mb-2",children:t(gr,{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 gr=n.div`
708
+ `;function rr({tool:r,loading:n}){const{logLevel:i="none",renderToolContent:o}=he(),s="response"in r,a=!s&&!n,{response:l,title:c,content:d,showStatus:u,defaultExpanded:m}=z(()=>{const n=(e=>{try{return JSON.parse(e.arguments)}catch(e){return null}})(r),i=e("span",{className:"text-truncate",children:r.title}),a=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(ir,{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(ir,{className:"border-top p-2",children:r.response||"None"})]})]}),l=r.content&&e(Jt,{value:r.content});if(o){const e=o({tool:r,args:n});if(e)return{title:null===e.title?null:e.title??i,response:null===e.response?null:e.response??a,content:null===e.content?null:e.content??l,showStatus:e.showStatus??!0,defaultExpanded:e.defaultExpanded??!1}}return{title:i,response:a,content:l,showStatus:!0,defaultExpanded:!1}},[r,o]),[h,p]=S(m),g="all"==i&&null!==l;return t(A,{children:[c&&e("div",{className:"mb-2",children:t(nr,{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(T,{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 nr=n.div`
738
709
  width: ${e=>e.$open?"auto":"fit-content"};
739
710
  max-width: 100%;
740
711
  overflow:hidden;
741
- `,fr=n.div`
712
+ `,ir=n.div`
742
713
  white-space: pre-wrap;
743
714
  overflow-y: auto;
744
715
  overflow-x: hidden;
745
716
  max-height: 150px;
746
- `;function br({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(yr,{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(xr,{className:"me-2 text-truncate",children:r.title}),e("span",{className:"me-auto"}),!s&&e("span",{className:"text-nowrap text-muted",children:vr(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 vr=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`,yr=n.div`
717
+ `;function or({node:r}){const[n,i]=S(!1),{nodeIconResolver:o}=he(),s=!("latency"in r),a=s?e(T,{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(ar,{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(lr,{className:"me-2 text-truncate",children:r.title}),e("span",{className:"me-auto"}),!s&&e("span",{className:"text-nowrap text-muted",children:sr(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 sr=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`,ar=n.div`
747
718
  svg {
748
719
  flex-shrink: 0;
749
720
  }
750
- `,xr=n.span`
721
+ `,lr=n.span`
751
722
  display: inline-block;
752
- `;function kr({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(br,{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 wr=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}=je(),y=I(()=>m?m.reduce(function(e,t){const r=Array.isArray(t.content)?t.content.reduce((e,t)=>{const r=Et(t);return r?e+r+"\n":e},""):Et(t.content);return e+r+"\n"+(t.tools||[]).reduce((e,t)=>{if(t.content){const r=Et(t.content);if(r)return e+r+"\n"}return e},"")},""):"",[m]),x=R(null),k=R(null),E=R(null),j=I(()=>m?.flatMap(e=>e.node?[e.node]:[])||[],[m]),$=c||u.length>0;return t(r,{children:[$&&t(Fr,{$reverse:!0,children:[g&&e(qr,{children:e("img",{src:g.avatar})}),e(Rr,{}),t(zr,{ref:x,children:[c&&e(qt,{content:c}),d&&e(J,{trigger:"click",container:x,rootClose:!0,placement:"bottom",overlay:e(Er,{body:!0,children:d}),children:e(jr,{children:e(Nr,{children:d})})}),u.length>0&&u.map(({name:t,size:r,path:n},i)=>N(n)?e(Ot,{src:`/uploads/${n}`},i):e(Cr,{children:e(Se,{name:t,url:`/uploads/${n}`,size:r})},i))]})]}),m&&t(Fr,{children:[f&&e(qr,{ref:k,children:e("img",{src:f.avatar})}),e(Rr,{}),t(zr,{children:[$&&!1!==i&&t(Mr,{children:[e(w,{placement:"top",content:y,as:At,tooltip:!0}),a&&e(ur,{loading:n.loading,avatarRef:k,contentRef:E,...a}),i?.({Component:At,message:n,content:y,setMessage:o,messages:v})]}),e(Sr,{children:["stats","all"].includes(b)&&n.stats&&t(r,{children:[t("span",{children:["耗时 ",n.stats.latency/1e3," 秒"]}),t("span",{children:["花费 Token ",n.stats.usage]})]})}),t($r,{ref:E,$deleted:!!h,children:["all"===b&&j.length>0&&e(kr,{loading:p,nodes:j}),m.map((r,n)=>t(D,{children:[r.reasoning&&["stats","all"].includes(b)&&e(sr,{reasoning:r.reasoning,loading:!r.content&&0===(r.tools||[]).length}),r.content&&e(Tt,{value:{chunkIndex:n,chunk:r,isLastMessage:l},children:e(ir,{cite:s,value:r.content})}),(r.tools||[]).map((t,i)=>e(Tt,{value:{chunkIndex:n,chunk:r,toolIndex:i,tool:t,isLastMessage:l},children:e(pr,{tool:t,loading:p})},i)),r.error&&e(qt,{content:`[${r.error}]`})]},n))]}),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(qt,{content:h.answer})]}),n.loading&&e(wt,{})]})]})]})}),Er=n(Q)`
723
+ `;function cr({nodes:r,loading:n}){const[i,o]=S(!1),s=r.some(e=>"error"in e),a=n?e(T,{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(or,{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 dr=D(({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}=he(),y=z(()=>m?m.reduce(function(e,t){const r=Array.isArray(t.content)?t.content.reduce((e,t)=>{const r=ut(t);return r?e+r+"\n":e},""):ut(t.content);return e+r+"\n"+(t.tools||[]).reduce((e,t)=>{if(t.content){const r=ut(t.content);if(r)return e+r+"\n"}return e},"")},""):"",[m]),x=F(null),k=F(null),N=F(null),j=z(()=>m?.flatMap(e=>e.node?[e.node]:[])||[],[m]),C=c||u.length>0;return t(r,{children:[C&&t(wr,{$reverse:!0,children:[g&&e(vr,{children:e("img",{src:g.avatar})}),e(yr,{}),t(xr,{ref:x,children:[c&&e(vt,{content:c}),d&&e(H,{trigger:"click",container:x,rootClose:!0,placement:"bottom",overlay:e(ur,{body:!0,children:d}),children:e(hr,{children:e(mr,{children:d})})}),u.length>0&&u.map(({name:t,size:r,path:n},i)=>E(n)?e(Mt,{src:`/uploads/${n}`},i):e(gr,{children:e(be,{name:t,url:`/uploads/${n}`,size:r})},i))]})]}),m&&t(wr,{children:[f&&e(vr,{ref:k,children:e("img",{src:f.avatar})}),e(yr,{}),t(xr,{children:[C&&!1!==i&&t(fr,{children:[e(w,{placement:"top",content:y,as:Et,tooltip:!0}),a&&e(Zt,{loading:n.loading,avatarRef:k,contentRef:N,...a}),i?.({Component:Et,message:n,content:y,setMessage:o,messages:v})]}),e(br,{children:["stats","all"].includes(b)&&n.stats&&t(r,{children:[t("span",{children:["耗时 ",n.stats.latency/1e3," 秒"]}),t("span",{children:["花费 Token ",n.stats.usage]})]})}),t(pr,{ref:N,$deleted:!!h,children:["all"===b&&j.length>0&&e(cr,{loading:p,nodes:j}),m.map((r,n)=>t(A,{children:[r.reasoning&&["stats","all"].includes(b)&&e(Wt,{reasoning:r.reasoning,loading:!r.content&&0===(r.tools||[]).length}),r.content&&e(Ct,{value:{chunkIndex:n,chunk:r,isLastMessage:l},children:e(Jt,{cite:s,value:r.content})}),(r.tools||[]).map((t,i)=>e(Ct,{value:{chunkIndex:n,chunk:r,toolIndex:i,tool:t,isLastMessage:l},children:e(rr,{tool:t,loading:p})},i)),r.error&&e(vt,{content:`[${r.error}]`})]},n))]}),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(vt,{content:h.answer})]}),n.loading&&e(dt,{})]})]})]})}),ur=n(Q)`
753
724
  max-width: calc(100% - .875rem * 2);
754
725
  width: calc(100% - .875rem * 2);
755
726
  font-size: 1rem;
@@ -758,25 +729,25 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
758
729
  .popover-body {
759
730
  padding: .5rem .75rem;
760
731
  }
761
- `,Nr=n.div`
732
+ `,mr=n.div`
762
733
  overflow: hidden;
763
734
  text-overflow: ellipsis;
764
735
  word-break: break-all;
765
736
  -webkit-line-clamp: 2;
766
737
  -webkit-box-orient: vertical;
767
738
  display: -webkit-box;
768
- `,jr=n.div`
739
+ `,hr=n.div`
769
740
  padding: .5rem .75rem;
770
741
  color: var(--bs-secondary);
771
742
  border-radius: var(--bs-border-radius-lg);
772
743
  background: #FFFFFF;
773
744
  cursor: pointer;
774
- `,$r=n.div`
745
+ `,pr=n.div`
775
746
  ${e=>e.$deleted&&i`
776
747
  text-decoration-line: line-through;
777
748
  color: var(--bs-secondary);
778
749
  `}
779
- `,Cr=n.div`
750
+ `,gr=n.div`
780
751
  width: 100%;
781
752
  margin-bottom: .5rem;
782
753
  margin-top: .5rem;
@@ -788,7 +759,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
788
759
  &:last-child {
789
760
  margin-bottom: 0;
790
761
  }
791
- `,Mr=n.div`
762
+ `,fr=n.div`
792
763
  position: absolute;
793
764
  top: -1.1rem;
794
765
  right: 0;
@@ -796,7 +767,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
796
767
  gap: .5rem;
797
768
  opacity: 0;
798
769
  z-index: 1;
799
- `,Sr=n.div`
770
+ `,br=n.div`
800
771
  position: absolute;
801
772
  bottom: -1.4rem;
802
773
  left: 0;
@@ -809,7 +780,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
809
780
  display: flex;
810
781
  opacity: 0;
811
782
  z-index: 1;
812
- `,qr=n.div`
783
+ `,vr=n.div`
813
784
  width: 35px;
814
785
  height: 35px;
815
786
  border-radius: 50%;
@@ -820,14 +791,14 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
820
791
  width: 100%;
821
792
  height: 100%;
822
793
  }
823
- `,Rr=n.div`
794
+ `,yr=n.div`
824
795
  width: 0;
825
796
  height: 0;
826
797
  content: "";
827
798
  border: 5px solid transparent;
828
799
  border-right-color: #f3f3f3;
829
800
  transform: translateY(10px);
830
- `,zr=n.div`
801
+ `,xr=n.div`
831
802
  padding: .875rem;
832
803
  background-color: rgb(243, 243, 243);
833
804
  border-radius: var(--bs-border-radius-lg);
@@ -835,31 +806,31 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
835
806
  position: relative;
836
807
 
837
808
  &:hover {
838
- ${Sr}, ${Mr} {
809
+ ${br}, ${fr} {
839
810
  opacity: 1;
840
811
  }
841
812
  }
842
- `,Fr=n.div`
813
+ `,wr=n.div`
843
814
  display: flex;
844
815
  justify-content: flex-start;
845
816
  padding: 1rem 0 1rem 0;
846
817
  ${e=>e.$reverse&&i`
847
818
  flex-direction: row-reverse;
848
819
 
849
- ${Rr} {
820
+ ${yr} {
850
821
  border-left-color: rgba(var(--bs-primary-rgb), 0.1);
851
822
  border-right-color: transparent;
852
823
  }
853
824
 
854
- ${zr} {
825
+ ${xr} {
855
826
  background: rgba(var(--bs-primary-rgb), 0.1);
856
827
  }
857
828
  `};
858
- `;function Ir(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}=je(),p=R(r.loaded),g=z(()=>{const e=l.current;e&&requestAnimationFrame(()=>{e.scrollTo({top:e.scrollHeight})})},[]),f=R(null),{height:b}=ve({ref:f});S(()=>{(u||!p.current)&&c.length>0&&(u&&(p.current=!0),g())},[b,u,p,c]),S(()=>{m.length>0&&g()},[m]),S(()=>{p.current=r.loaded},[h]),S(()=>{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 t(Ar,{ref:f,children:[0===v.length&&n,v.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===v.length-1};return a?a({Component:wr,props:n},r):e(wr,{...n},r)}),m.length>0&&e(Dr,{children:m.map((t,r)=>e("a",{href:"#!question",children:t},r))})]})}const Ar=n.div`
829
+ `;function kr(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}=he(),p=F(r.loaded),g=q(()=>{const e=l.current;e&&requestAnimationFrame(()=>{e.scrollTo({top:e.scrollHeight})})},[]),f=F(null),{height:b}=se({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 t(Er,{ref:f,children:[0===v.length&&n,v.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===v.length-1};return a?a({Component:dr,props:n},r):e(dr,{...n},r)}),m.length>0&&e(Nr,{children:m.map((t,r)=>e("a",{href:"#!question",children:t},r))})]})}const Er=n.div`
859
830
  display: flex;
860
831
  flex-direction: column;
861
832
  flex: 1;
862
- `,Dr=n.div`
833
+ `,Nr=n.div`
863
834
  display: flex;
864
835
  flex-direction: column;
865
836
  align-items: flex-start;
@@ -876,16 +847,16 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
876
847
  background: var(--bs-secondary-bg-subtle);
877
848
  }
878
849
  }
879
- `,Lr=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:x,request:w,onReset:E,transformMessages:N=ft},$)=>{const C=z(e=>{const t=[];if(u&&!1!==u.enable){const e=bt(u.questions||[]);t.push({chunks:[{content:[u.prologue,...e.map(e=>`[${e}](#!question)`)].join("\n"),tools:[]}],loading:u.loading})}return e?t.concat(N(e.messages||[])):x?t.concat(N(x)):t},[u]),[M,F]=q(m?.id),[D,L]=q(),[T,P]=v([]);S(()=>{P(C(m))},[u]);const[O,_]=q(!1),B=R(null),[U,H]=q([]),J=z(e=>{F(e?.id),P(C(e)),H([]),_(!1),E?.(e)},[O,C,E]);return A($,()=>({reset:J}),[J]),e($e,{request:I(()=>w?"string"==typeof w?j.create({baseURL:w}):w:j,[w]),bot:n,user:i,logLevel:s,imageResolver:a,nodeIconResolver:l,conversationId:M,setConversationId:F,input:D,setInput:L,messages:T,setMessages:P,suggestions:U,setSuggestions:H,loading:O,setLoading:_,renderFileItem:f,reset:J,readonly:!o,renderToolContent:b,renderReasoning:y,children:e(Pr,{className:r,children:t(k,{children:[e(Tr,{ref:B,children:e(Ir,{placeholder:c,cite:h,actions:d,loaded:!o,speech:p,renderItem:g,scrollRef:B})}),o&&e(ot,{...o,scrollRef:B})]})})})}),se),Tr=n.div`
850
+ `,jr=D(R(({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=it},C)=>{const $=q(e=>{const t=[];if(u&&!1!==u.enable){const e=ot(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,R]=S(m?.id),[A,D]=S(),[L,P]=v(()=>$(m)),[T,O]=S(!1),B=F(null),[U,_]=S([]),H=q(e=>{R(e?.id),P($(e)),_([]),O(!1),E?.(e)},[T,$,E]);return I(C,()=>({reset:H}),[H]),e(pe,{request:z(()=>k?"string"==typeof k?N.create({baseURL:k}):k:N,[k]),bot:n,user:i,logLevel:s,imageResolver:a,nodeIconResolver:l,conversationId:M,setConversationId:R,input:A,setInput:D,messages:L,setMessages:P,suggestions:U,setSuggestions:_,loading:T,setLoading:O,renderFileItem:f,reset:H,readonly:!o,renderToolContent:b,renderReasoning:y,children:e($r,{className:r,children:t(x,{children:[e(Cr,{ref:B,children:e(kr,{placeholder:c,cite:h,actions:d,loaded:!o,speech:p,renderItem:g,scrollRef:B})}),o&&e(We,{...o,scrollRef:B})]})})})}),W),Cr=n.div`
880
851
  display: flex;
881
852
  flex-direction: column;
882
853
  flex: 1;
883
854
  overflow-y: auto;
884
855
  padding: 0 1rem;
885
856
  margin-bottom: .5rem;
886
- `,Pr=n.div`
857
+ `,$r=n.div`
887
858
  display: flex;
888
859
  flex-direction: column;
889
860
  height: 100%;
890
861
  position: relative;
891
- `;async function Or(e){const t=await ye().use(ke).use(ue).use(me).use(he).use(we).use(xe).process(e);return String(t)}export{Be as ActionButton,Se as FileItem,qt as Markdown,Lr as MessageBox,De as VariableForm,Ee as isToolMessage,Or as md2html,bt as pickQuestions,je as useMessageContext,dr as useSynthesis};
862
+ `;async function Mr(e){const t=await ae().use(ce).use(Z).use(ee).use(te).use(de).use(le).process(e);return String(t)}export{Fe as ActionButton,Je as EditableInput,be as FileItem,vt as Markdown,jr as MessageBox,Ne as VariableForm,ue as isToolMessage,Mr as md2html,ot as pickQuestions,he as useMessageContext,Gt as useSynthesis};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@topthink/chat",
3
- "version": "1.2.4",
3
+ "version": "1.2.5",
4
4
  "module": "es/index.js",
5
5
  "types": "types/index.d.ts",
6
6
  "files": [
@@ -10,10 +10,8 @@
10
10
  ],
11
11
  "dependencies": {
12
12
  "@babel/runtime": "^7.11.2",
13
- "@block-kit/core": "^1.0.22",
14
- "@block-kit/variable": "^1.0.21",
15
13
  "@breezystack/lamejs": "^1.2.7",
16
- "@topthink/components": "1.2.3",
14
+ "@topthink/components": "1.2.4",
17
15
  "@types/hast": "^3.0.4",
18
16
  "@types/mdast": "^4.0.4",
19
17
  "eventemitter3": "^5.0.1",
@@ -24,6 +22,7 @@
24
22
  "micromark-util-symbol": "^2.0.1",
25
23
  "micromark-util-types": "^2.0.2",
26
24
  "react-markdown": "^10.1.0",
25
+ "react-textarea-autosize": "^8.5.9",
27
26
  "rehype-highlight": "^7.0.2",
28
27
  "rehype-katex": "^7.0.1",
29
28
  "rehype-stringify": "^10.0.1",
@@ -64,7 +63,7 @@
64
63
  },
65
64
  "author": "yunwuxin <tzzhangyajun@qq.com> (https://github.com/yunwuxin)",
66
65
  "license": "MIT",
67
- "gitHead": "6add4cb134859a69668da4dc736941afa43ebe3c",
66
+ "gitHead": "5b926446ee583f2265247e1b937fc2fac53519a5",
68
67
  "scripts": {
69
68
  "prebuild": "rimraf es types",
70
69
  "build": "rollup -c --environment NODE_ENV:production",
@@ -2,6 +2,7 @@ import { RequestInstance } from '@topthink/components';
2
2
  import { ComponentType, MutableRefObject, ReactElement, ReactNode } from 'react';
3
3
  import { Conversation, ConversationMessage, Input, LogLevel, Message, MessageBoxType, Variable } from '../../types';
4
4
  import { MessageActions, MessageItemProps } from './message-item';
5
+ import type { RenderEditableInput } from './input-box';
5
6
  import { ToolRenderOptions, ToolRenderResult } from './context';
6
7
  import { Components } from 'react-markdown';
7
8
  import { FileItemProps } from './file-item';
@@ -42,7 +43,9 @@ export interface MessageBoxProps {
42
43
  minRows?: number;
43
44
  suggestion?: boolean;
44
45
  toolbar?: ReactNode;
46
+ toolbarActions?: ReactNode;
45
47
  autoFocus?: boolean;
48
+ renderEditableInput?: RenderEditableInput;
46
49
  placeholder?: string;
47
50
  variables?: {
48
51
  config: Variable[];
@@ -0,0 +1,17 @@
1
+ export interface EditableInputProps {
2
+ readonly?: boolean;
3
+ autoFocus?: boolean;
4
+ placeholder?: string;
5
+ minRows: number;
6
+ maxRows: number;
7
+ onSubmit?: () => void;
8
+ onFocusedChange?: (focused: boolean) => void;
9
+ onQueryChange?: (query: string) => void;
10
+ onPaste?: (e: ClipboardEvent) => void;
11
+ }
12
+ export interface EditableInputRef {
13
+ setContent: (fn: string | ((query: string) => string)) => void;
14
+ focus: () => void;
15
+ }
16
+ declare const _default: import("react").ForwardRefExoticComponent<EditableInputProps & import("react").RefAttributes<EditableInputRef>>;
17
+ export default _default;
@@ -1,7 +1,12 @@
1
- import { MutableRefObject, ReactNode } from 'react';
1
+ import { ForwardRefExoticComponent, MutableRefObject, RefAttributes, ReactNode } from 'react';
2
2
  import { Input, Variable } from '../../../types';
3
- import '@block-kit/variable/dist/style/index.css';
4
- interface Props {
3
+ import { EditableInputProps, EditableInputRef } from './editable-input';
4
+ export type EditableInputComponent = ForwardRefExoticComponent<EditableInputProps & RefAttributes<EditableInputRef>>;
5
+ export type RenderEditableInput = (options: {
6
+ Component: EditableInputComponent;
7
+ props: EditableInputProps & RefAttributes<EditableInputRef>;
8
+ }) => ReactNode;
9
+ export interface Props {
5
10
  suggestion?: boolean;
6
11
  variables?: {
7
12
  config: Variable[];
@@ -15,13 +20,15 @@ interface Props {
15
20
  maxRows?: number;
16
21
  scrollRef: MutableRefObject<HTMLDivElement | null>;
17
22
  toolbar?: ReactNode | true;
23
+ toolbarActions?: ReactNode;
18
24
  disabled?: boolean;
19
25
  placeholder?: string;
20
26
  autoFocus?: boolean;
27
+ renderEditableInput?: RenderEditableInput;
21
28
  onEvent?: (event: {
22
29
  type: string;
23
30
  data?: any;
24
31
  }) => void;
25
32
  }
26
- declare const _default: import("react").ForwardRefExoticComponent<Props & import("react").RefAttributes<Input>>;
33
+ declare const _default: ForwardRefExoticComponent<Props & RefAttributes<Input>>;
27
34
  export default _default;
@@ -1,6 +1,7 @@
1
1
  import { ReactNode } from 'react';
2
2
  interface Props {
3
3
  children?: ReactNode;
4
+ actions?: ReactNode;
4
5
  }
5
- export default function Toolbar({ children }: Props): import("react/jsx-runtime").JSX.Element;
6
+ export default function Toolbar({ children, actions }: Props): import("react/jsx-runtime").JSX.Element;
6
7
  export {};
@@ -1,5 +1,6 @@
1
+ import { Message } from '../../../types';
1
2
  export default function useChat(): {
2
- send: (params: string | import("../../..").SendParams, files?: import("../../..").Message["files"], variables?: import("../../..").Message["variables"]) => Promise<void>;
3
+ send: (params: string | import("../../..").SendParams, files?: Message["files"], variables?: Message["variables"]) => Promise<void>;
3
4
  resume: (params: import("../../..").ResumeParams) => Promise<void>;
4
5
  suggest: () => Promise<void>;
5
6
  };
package/types/index.d.ts CHANGED
@@ -1,11 +1,13 @@
1
1
  export * from './types';
2
2
  export { default as MessageBox, MessageBoxProps } from './components/message-box';
3
3
  export { useContext as useMessageContext, ToolRenderOptions, ToolRenderResult } from './components/message-box/context';
4
+ export { default as EditableInput } from './components/message-box/input-box/editable-input';
5
+ export type { EditableInputProps, EditableInputRef } from './components/message-box/input-box/editable-input';
6
+ export type { EditableInputComponent, RenderEditableInput } from './components/message-box/input-box';
4
7
  export { default as ActionButton } from './components/action-button';
5
8
  export { default as Markdown } from './components/markdown';
6
9
  export { default as VariableForm } from './components/variable-form';
7
10
  export { default as FileItem } from './components/message-box/file-item';
8
11
  export { default as pickQuestions } from './utils/pick-questions';
9
12
  export { default as useSynthesis } from './speech/use-synthesis';
10
- export { ContentChangeEvent } from '@block-kit/core';
11
13
  export { default as md2html } from './utils/md2html';
package/types/types.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import { Editor } from '@block-kit/variable';
2
1
  export interface FormField {
3
2
  name: string;
4
3
  label: string;
@@ -153,7 +152,6 @@ export interface MessageBoxType {
153
152
  reset(conversation?: Conversation): void;
154
153
  }
155
154
  export interface Input extends Chat {
156
- editor: Editor;
157
155
  setQuery(query: string): void;
158
156
  setQuote(quote: string): void;
159
157
  focus(): void;