@qfei-design/make-ai-assistant 0.2.11 → 0.2.12

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/dist/react.cjs CHANGED
@@ -1,5 +1,5 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),r=require("react"),Ce=require("./index.cjs"),x=require("./conversation-Cvh-IVRV.cjs"),Dt=t=>t?.trim()||void 0,fe=(t,s)=>Dt(t)??s,mt=t=>{const s=Dt(t?.primary);if(s)return{"--make-ai-theme-primary":s,"--make-ai-theme-primary-hover":fe(t?.primaryHover,"color-mix(in srgb, var(--make-ai-theme-primary) 84%, #15233d)"),"--make-ai-theme-on-primary":fe(t?.onPrimary,"#fcfcff"),"--make-ai-theme-bg":fe(t?.background,"color-mix(in srgb, var(--make-ai-theme-primary) 2%, #fcfcff)"),"--make-ai-theme-surface":fe(t?.surface,"color-mix(in srgb, var(--make-ai-theme-primary) 4%, var(--make-ai-theme-bg))"),"--make-ai-theme-surface-strong":fe(t?.surfaceStrong,"color-mix(in srgb, var(--make-ai-theme-primary) 8%, var(--make-ai-theme-bg))"),"--make-ai-theme-text":fe(t?.text,"color-mix(in srgb, var(--make-ai-theme-primary) 12%, #252631)"),"--make-ai-theme-text-secondary":fe(t?.textSecondary,"color-mix(in srgb, var(--make-ai-theme-text) 74%, var(--make-ai-theme-primary))"),"--make-ai-theme-border":fe(t?.border,"color-mix(in srgb, var(--make-ai-theme-primary) 14%, var(--make-ai-theme-bg))"),"--make-ai-theme-overlay":fe(t?.overlay,"color-mix(in srgb, var(--make-ai-theme-text) 88%, var(--make-ai-theme-primary))"),"--make-ai-theme-on-overlay":fe(t?.onOverlay,"#fcfcff")}},Tt=(t,s)=>!s||!r.isValidElement(t)||typeof t.type!="string"?t:r.cloneElement(t,{style:{...t.props.style,...s}});function Ot({artifact:t,context:s,fallback:a,onAction:o,onActionError:n,registry:c,theme:d}){const g=mt(d),p=Ce.resolveArtifactTemplate(c,t,s);if(!p){const E=a?a(t):e.jsxs("section",{className:"make-ai-artifact make-ai-artifact--unsupported",role:"status",children:[e.jsx("strong",{children:"暂不支持展示此结果"}),e.jsxs("span",{children:["结果类型:",t.kind]})]});return Tt(E,g)}const f={context:s,onAction:o,onActionError:n,theme:d,themeStyle:g},j=p.template.render(t,s,f);return Tt(j,g)}const Re=(t,s,a)=>{if(t==null||t==="")return"—";if(typeof t=="boolean")return t?"是":"否";if(typeof t!="number")return`${t}${s?.unit??""}`;const o=s?.precision,n={maximumFractionDigits:o??2,minimumFractionDigits:o};s?.style==="currency"&&s.currency?(n.style="currency",n.currency=s.currency):s?.style==="percent"&&(n.style="percent");try{const c=s?.style==="percent"?t/100:t;return`${new Intl.NumberFormat(a,n).format(c)}${s?.unit??""}`}catch{return`${t}${s?.unit??""}`}},Ft=t=>{let s=Number.POSITIVE_INFINITY,a=Number.NEGATIVE_INFINITY;for(const o of t)s=Math.min(s,o),a=Math.max(a,o);return Number.isFinite(s)&&Number.isFinite(a)?{min:s,max:a}:{min:0,max:0}},Pt=(t,s,a)=>{if(!a.onAction)return;const o=c=>{console.error("[make-ai-assistant] host action error handler failed",{actionId:t.id,artifactId:s.artifact.id,errorType:c instanceof Error?c.name:typeof c,intent:t.intent})},n=c=>{if(a.onActionError){try{Promise.resolve(a.onActionError(c,t,s)).catch(o)}catch(d){o(d)}return}console.error("[make-ai-assistant] host action failed",{actionId:t.id,artifactId:s.artifact.id,errorType:c instanceof Error?c.name:typeof c,intent:t.intent})};try{Promise.resolve(a.onAction(t,s)).catch(n)}catch(c){n(c)}},Fe=(t,s)=>t.actions?.length&&s.onAction?e.jsx("div",{className:"make-ai-artifact__actions",children:t.actions.map(a=>e.jsxs("button",{className:`make-ai-artifact__action make-ai-artifact__action--${a.appearance??"link"}`,type:"button",onClick:()=>Pt(a,{artifact:t,context:s.context},s),children:[a.label,e.jsx("span",{"aria-hidden":"true",children:"→"})]},a.id))}):null,Pe=(t,s,a="",o)=>e.jsxs("section",{"aria-label":t.title??`${t.kind} result`,className:`make-ai-artifact ${a}`.trim(),"data-artifact-density":t.presentation?.density,"data-artifact-kind":t.kind,style:o,children:[t.title?e.jsx("h4",{className:"make-ai-artifact__title",children:t.title}):null,t.summary?e.jsx("p",{className:"make-ai-artifact__summary",children:t.summary}):null,s]}),ls=({artifact:t,renderContext:s})=>{const a=t.data.delta,o=a?Re(a.value,a.format==="percent"?{style:"percent"}:void 0,s.context.locale):void 0;return Pe(t,e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"make-ai-artifact__metric-value",children:Re(t.data.value,t.data.format,s.context.locale)}),a?e.jsxs("div",{className:`make-ai-artifact__delta make-ai-artifact__delta--${a.direction??"flat"}`,children:[e.jsx("span",{"aria-hidden":"true",children:a.direction==="up"?"↗":a.direction==="down"?"↘":"→"}),e.jsx("span",{children:o}),a.label?e.jsx("span",{children:a.label}):null]}):null,t.data.context?e.jsx("p",{className:"make-ai-artifact__context",children:t.data.context}):null,Fe(t,s)]}),"make-ai-artifact--metric",s.themeStyle)},ds=({artifact:t,renderContext:s})=>Pe(t,e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"make-ai-artifact__comparison",children:t.data.items.map(a=>e.jsxs("div",{className:"make-ai-artifact__comparison-item",children:[e.jsx("span",{children:a.label}),e.jsx("strong",{children:Re(a.value,a.format,s.context.locale)}),a.hint?e.jsx("small",{children:a.hint}):null]},a.id))}),Fe(t,s)]}),"make-ai-artifact--comparison",s.themeStyle),us=({artifact:t,renderContext:s})=>{const a=t.data.series.flatMap(d=>d.points.map(g=>g.y)),{max:o,min:n}=Ft(a),c=o-n||1;return Pe(t,e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"make-ai-artifact__trend",children:t.data.series.map(d=>e.jsxs("div",{className:"make-ai-artifact__trend-series",children:[e.jsx("div",{className:"make-ai-artifact__trend-label",children:d.label}),e.jsx("div",{className:"make-ai-artifact__trend-bars",children:d.points.map((g,p)=>{const f=18+(g.y-n)/c*70;return e.jsxs("div",{className:"make-ai-artifact__trend-point",children:[e.jsx("span",{"aria-label":`${g.x}: ${Re(g.y,d.format,s.context.locale)}`,className:"make-ai-artifact__trend-bar",role:"img",style:{height:`${f}%`},title:`${g.x}: ${Re(g.y,d.format,s.context.locale)}`}),e.jsx("small",{children:g.x})]},`${g.x}-${p}`)})})]},d.id))}),Fe(t,s)]}),"make-ai-artifact--trend",s.themeStyle)},ms=({artifact:t,renderContext:s})=>{const{max:a}=Ft(t.data.items.map(n=>Math.abs(n.value))),o=Math.max(a,1);return Pe(t,e.jsxs(e.Fragment,{children:[e.jsx("ol",{className:"make-ai-artifact__ranking",children:t.data.items.map((n,c)=>e.jsxs("li",{children:[e.jsx("span",{className:"make-ai-artifact__rank",children:c+1}),e.jsxs("span",{className:"make-ai-artifact__ranking-label",children:[e.jsx("span",{children:n.label}),n.description?e.jsx("small",{children:n.description}):null]}),e.jsx("span",{className:"make-ai-artifact__ranking-track","aria-hidden":"true",children:e.jsx("span",{style:{width:`${Math.abs(n.value)/o*100}%`}})}),e.jsx("strong",{children:Re(n.value,n.format,s.context.locale)})]},n.id))}),Fe(t,s)]}),"make-ai-artifact--ranking",s.themeStyle)},hs=(t,s)=>s.action??{id:`open-${s.id}`,label:s.title??s.id,intent:"open-record",target:{entityKey:t.data.entity.key,recordId:s.id}},fs=({artifact:t,renderContext:s})=>Pe(t,e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"make-ai-artifact__record-list",children:t.data.records.length===0?e.jsx("p",{className:"make-ai-artifact__empty",children:"没有符合条件的记录"}):t.data.records.map(a=>{const o=hs(t,a),n=e.jsxs(e.Fragment,{children:[e.jsx("strong",{children:a.title??a.id}),e.jsx("span",{className:"make-ai-artifact__record-values",children:t.data.columns.map(c=>e.jsxs("span",{children:[e.jsx("small",{children:c.label}),Re(a.values[c.key],c.format,s.context.locale)]},c.key))}),s.onAction?e.jsx("span",{"aria-hidden":"true",children:"›"}):null]});return s.onAction?e.jsx("button",{className:"make-ai-artifact__record",type:"button",onClick:()=>Pt(o,{artifact:t,context:s.context},s),children:n},a.id):e.jsx("div",{className:"make-ai-artifact__record",children:n},a.id)})}),t.data.total!==void 0?e.jsxs("p",{className:"make-ai-artifact__record-total",children:["共 ",t.data.total," 条"]}):null,Fe(t,s)]}),"make-ai-artifact--record-list",s.themeStyle),ps=({artifact:t,renderContext:s})=>Pe(t,e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:`make-ai-artifact__notice make-ai-artifact__notice--${t.data.tone}`,children:[e.jsx("span",{"aria-hidden":"true",children:t.data.tone==="success"?"✓":t.data.tone==="warning"?"!":t.data.tone==="danger"?"×":"i"}),e.jsx("p",{children:t.data.body})]}),Fe(t,s)]}),"make-ai-artifact--notice",s.themeStyle),De=(t,s,a)=>({id:t,kinds:[s],priority:0,render:a}),vs=[De("platform.metric.default","metric",(t,s,a)=>e.jsx(ls,{artifact:t,renderContext:a})),De("platform.comparison.default","comparison",(t,s,a)=>e.jsx(ds,{artifact:t,renderContext:a})),De("platform.trend.default","trend",(t,s,a)=>e.jsx(us,{artifact:t,renderContext:a})),De("platform.ranking.default","ranking",(t,s,a)=>e.jsx(ms,{artifact:t,renderContext:a})),De("platform.record-list.default","record-list",(t,s,a)=>e.jsx(fs,{artifact:t,renderContext:a})),De("platform.notice.default","notice",(t,s,a)=>e.jsx(ps,{artifact:t,renderContext:a}))],Bt=Ce.createArtifactTemplateRegistry(vs).templates,zt=(t=Bt)=>Ce.createArtifactTemplateRegistry(t),Oe=()=>globalThis.crypto.randomUUID(),ht=t=>{const s=t,a=s?.status??s?.response?.status;return a===409?"数据已变化或对话仍在运行,请刷新后重试":a===401||s?.code==="AI_AUTH_REQUIRED"||s?.code==="AI_AUTH_EXPIRED"?"登录已失效,请重新登录":a===403?"当前账号无权访问该对话":a===404?"对话或回答已不可见,请刷新列表":s?.message?.startsWith("输入内容过长")?s.message:"操作未完成,请重试或刷新对话"};function gs(t,s){const a=s.features?.conversationManagement===!0,o=a?s.scopeKey?.(t)??t.app.id:"",n=r.useRef(o);n.current=o;const c=r.useRef(o),[d,g]=r.useState(x.createAssistantConversationState),p=r.useRef(d),f=i=>{const h=typeof i=="function"?i(p.current):i;p.current=h,g(h)},[j,E]=r.useState([]),[B,H]=r.useState(),y=r.useRef(void 0),[V,Q]=r.useState(""),[W,v]=r.useState(-1),[u,l]=r.useState(!1),[T,N]=r.useState(!1),[ae,R]=r.useState(a),[G,K]=r.useState(!1),[L,q]=r.useState(),[ne,re]=r.useState([]),[de,ye]=r.useState([]),be=r.useRef(new Set),X=r.useRef(new Map),k=r.useRef(0),b=r.useRef(0),P=r.useRef(0),Y=r.useRef(void 0),ee=r.useRef(void 0),Se=r.useRef(new Map),C=(i,h=o)=>b.current===i&&n.current===h,te=()=>{const i=new AbortController;return be.current.add(i),i},ie=i=>be.current.delete(i),ue=i=>{y.current=i,H(i)},je=()=>{for(const i of X.current.values())i.abort();X.current.clear()},J=i=>{i instanceof Error&&i.name==="AbortError"||(console.warn("[make-ai-assistant] conversation operation failed",{errorType:i instanceof Error?i.name:typeof i}),q(ht(i)))},ve=async i=>{if(!a||!s.listConversations)return;const h=b.current,_=++P.current,A=te();try{const w=await s.listConversations(t,{cursor:i},{signal:A.signal});if(!C(h)||A.signal.aborted||_!==P.current)return;E(S=>[...new Map([...i?S:[],...w.chats].map(I=>[I.chatId,I])).values()]),Q(w.nextCursor)}catch(w){C(h)&&!A.signal.aborted&&J(w)}finally{ie(A),C(h)&&R(!1)}},_e=async(i,h,_)=>{const A=b.current,w=k.current;let S;try{for await(const I of i){if(!C(A)||h.signal.aborted||w!==k.current||y.current?.chatId!==_)return;const z=x.parseAssistantEvent(I);if(z.type==="response.accepted"||z.type==="response.state"){S=z.responseId;const F=X.current.get(S);if(F&&F!==h){z.type==="response.accepted"&&f(O=>x.reduceAssistantEvent(O,z)),h.abort();return}X.current.set(S,h)}f(F=>x.reduceAssistantEvent(F,z)),z.type==="response.terminal"&&(re(F=>F.filter(O=>O!==z.responseId)),ve())}}catch(I){C(A)&&!h.signal.aborted&&w===k.current&&(J(I),S||f(z=>({...z,status:Object.values(z.responses??{}).some(F=>!x.isResponseTerminal(F.status))?"streaming":"error"})))}finally{S&&X.current.get(S)===h&&X.current.delete(S),ie(h)}},Xe=async(i,h,_,A)=>{if(!s.getResponse||!s.watchResponse)return;const w=new Set(i.filter(I=>I.role==="assistant"&&I.persistent).map(I=>I.responseId)),S=[...new Map(i.filter(I=>I.role==="user"&&I.responseId&&!w.has(I.responseId)).map(I=>[I.responseId,I.cursor??-1])).entries()].slice(-20);for(const[I,z]of S){if(!C(A)||_!==k.current)return;if(X.current.has(I))continue;const F=te();try{const O=await s.getResponse(t,{chatId:h,responseId:I},{signal:F.signal});if(!C(A)||F.signal.aborted||_!==k.current||X.current.has(I))continue;f(he=>x.reduceAssistantEvent(he,x.isResponseTerminal(O.status)?{type:"response.snapshot",snapshot:O}:{type:"response.state",chatId:h,responseId:I,status:O.status})),O.status==="failed"||O.status==="cancelled"?f(he=>x.reduceAssistantEvent(he,{type:"response.terminal",chatId:h,responseId:I,status:O.status})):(X.current.set(I,F),_e(s.watchResponse(t,{chatId:h,responseId:I,historyCursor:z},{signal:F.signal}),F,h))}catch(O){C(A)&&!F.signal.aborted&&J(O)}finally{X.current.get(I)!==F&&ie(F)}}},oe=async i=>{const h=++k.current,_=b.current,A=te();je(),q(void 0),R(!0),re([]),ee.current=void 0,ue(i),f({messages:[],status:"idle",threadId:i.chatId}),v(-1),l(!1),N(!1);try{const[w,S]=await Promise.all([s.getConversation(t,{chatId:i.chatId},{signal:A.signal}),s.loadConversation(t,{threadId:i.chatId,cursor:-1,signal:A.signal})]);if(!C(_)||A.signal.aborted||h!==k.current)return;if(w.chatId!==i.chatId||S.threadId!==i.chatId)throw new Error("Conversation mismatch");ue(w),f(x.createAssistantConversationState(S)),v(S.nextCursor??-1),l(S.hasMore??!1),Xe(S.messages,i.chatId,h,_)}catch(w){C(_)&&!A.signal.aborted&&h===k.current&&J(w)}finally{ie(A),C(_)&&h===k.current&&R(!1)}},me=async()=>{if(y.current)return y.current;if(Y.current??={requestId:Oe()},Y.current.promise)return Y.current.promise;const i=b.current,h=k.current,_=te(),A=Y.current;return K(!0),A.promise=s.createConversation(t,{requestId:A.requestId},{signal:_.signal}).then(w=>{if(!C(i)||_.signal.aborted||h!==k.current)throw Object.assign(new Error("Stale create"),{name:"AbortError"});return Y.current=void 0,ue(w),f({messages:[],status:"idle",threadId:w.chatId}),ve(),w}).finally(()=>{ie(_),A.promise=void 0,C(i)&&K(!1)}),A.promise},Ye=async()=>{if(!(G||Y.current?.promise)){k.current+=1,je(),ue(void 0),q(void 0),ee.current=void 0,f(x.createAssistantConversationState()),l(!1),v(-1);try{await me()}catch(i){J(i)}}},ke=async i=>{const h=te();ee.current=i,q(void 0),p.current.messages.some(_=>_.id===i.message.id)||f(_=>x.appendUserMessage(_,i.message)),await _e(s.run(i,{signal:h.signal}),h,i.threadId)},Ze=async(i,h)=>{if(!(!i.trim()&&!h?.length))try{const _=await me(),A={id:Oe(),content:i,...h?{parts:h}:{}};await ke({threadId:_.chatId,message:A,context:t,capabilities:{artifactSchemaVersions:[],artifactKinds:[],templates:[]}})}catch(_){J(_)}},Ie=async()=>{const i=ee.current;if(!i||i.threadId!==y.current?.chatId){y.current&&await oe(y.current);return}const h=p.current.messages.find(_=>_.id===i.message.id);if(h?.responseId&&s.watchResponse){const _=h.responseId;if(X.current.has(_))return;const A=te();X.current.set(_,A),q(void 0),await _e(s.watchResponse(t,{chatId:i.threadId,responseId:_,historyCursor:h.cursor},{signal:A.signal}),A,i.threadId)}else await ke(i)},Ae=async(i=p.current.activeRunId)=>{const h=y.current;if(!h||!i||!s.cancelResponse||ne.includes(i))return;const _=b.current,A=k.current,w=te();re(S=>[...S,i]),q(void 0);try{const S=await s.cancelResponse(t,{chatId:h.chatId,responseId:i},{signal:w.signal});if(!C(_)||A!==k.current)return;if(x.isResponseTerminal(S.status))f(I=>x.reduceAssistantEvent(I,{type:"response.snapshot",snapshot:S})),re(I=>I.filter(z=>z!==i));else if(!X.current.has(i)&&s.watchResponse){const I=te();X.current.set(i,I),_e(s.watchResponse(t,{chatId:h.chatId,responseId:i},{signal:I.signal}),I,h.chatId)}}catch(S){C(_)&&A===k.current&&(J(S),re(I=>I.filter(z=>z!==i)))}finally{ie(w)}},we=async(i,h=y.current)=>{if(!h||G)return;const _=b.current,A=te();K(!0),q(void 0);try{const w=await s.updateConversation(t,{chatId:h.chatId,expectedRevision:h.revision,...i},{signal:A.signal});if(!C(_))return;y.current?.chatId===w.chatId&&ue(w),await ve()}catch(w){if(C(_)){J(w);try{const S=await s.getConversation(t,{chatId:h.chatId},{signal:A.signal});C(_)&&y.current?.chatId===h.chatId&&ue(S)}catch{}ve()}}finally{ie(A),C(_)&&K(!1)}},Ge=async(i=y.current)=>{if(!i||G)return;const h=b.current,_=te();K(!0),q(void 0);try{if(await s.deleteConversation(t,{chatId:i.chatId,expectedRevision:i.revision},{signal:_.signal}),!C(h))return;y.current?.chatId===i.chatId&&(k.current+=1,je(),ue(void 0),f(x.createAssistantConversationState())),await ve()}catch(A){C(h)&&J(A)}finally{ie(_),C(h)&&K(!1)}},Ee=async(i,h,_="",A="")=>{const w=y.current;if(!w||!i.persistent||!s.setFeedback||de.includes(i.id))return;const S={chatId:w.chatId,messageId:i.id,rating:h,..._?{reason:_}:{},...A?{comment:A}:{}},I=Se.current.get(i.id),{requestId:z,...F}=I??{requestId:""},O=I&&JSON.stringify(F)===JSON.stringify(S)?I:{...S,requestId:Oe()};Se.current.set(i.id,O);const he=b.current,Be=k.current,ze=te();ye(ce=>[...ce,i.id]),q(void 0);try{const ce=await s.setFeedback(t,O,{signal:ze.signal});return!C(he)||Be!==k.current||Se.current.get(i.id)!==O?void 0:(f(Ne=>({...Ne,messages:Ne.messages.map(ge=>ge.id===i.id&&ce.revision>=(ge.feedback?.revision??0)?{...ge,feedback:ce}:ge)})),Se.current.delete(i.id),!0)}catch(ce){return C(he)&&Be===k.current&&J(ce),!1}finally{ie(ze),C(he)&&ye(ce=>ce.filter(Ne=>Ne!==i.id))}},Je=async()=>{if(!y.current||!u||ae)return;const i=b.current,h=k.current,_=y.current,A=te();R(!0);try{const w=await s.loadConversation(t,{threadId:_.chatId,cursor:W,signal:A.signal});if(!C(i)||h!==k.current)return;const S=x.createAssistantConversationState(w),I=[...new Map([...p.current.messages,...S.messages].map(O=>[O.id,O])).values()];let z=0;const F=[];for(const O of I.slice(-200).reverse()){if(z+=[...O.content].length,z>1e6)break;F.unshift(O)}F.length<I.length&&N(!0),f(O=>({...O,messages:F})),v(w.nextCursor??W),l(w.hasMore??!1),Xe(w.messages,_.chatId,h,i)}catch(w){C(i)&&J(w)}finally{ie(A),C(i)&&R(!1)}};r.useEffect(()=>(b.current+=1,c.current=o,Y.current=void 0,ee.current=void 0,Se.current.clear(),ue(void 0),E([]),Q(""),f(x.createAssistantConversationState()),q(void 0),R(a),K(!1),re([]),ye([]),a&&ve(),()=>{b.current+=1,k.current+=1;for(const i of be.current)i.abort();be.current.clear(),X.current.clear()}),[a,o,s]);const Te=c.current===o;return{enabled:a,state:Te?d:x.createAssistantConversationState(),setState:f,chats:Te?j:[],chat:Te?B:void 0,listCursor:V,historyMore:u,historyTruncated:T,loading:!Te||ae,busy:G,error:Te?L:void 0,cancelling:ne,feedbackBusy:de,refresh:ve,select:oe,create:Ye,ensureChat:me,send:Ze,retry:Ie,stop:Ae,update:we,remove:Ge,feedback:Ee,moreHistory:Je,setError:q}}const xs=()=>e.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[e.jsx("path",{d:"M5 5.5h14v10H9l-4 3v-13Z"}),e.jsx("path",{d:"M8 9h8M8 12h6"})]}),ys=()=>e.jsx("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:e.jsx("path",{d:"M12 5v14M5 12h14"})});function bs({id:t,manager:s,onDismiss:a,onNewConversation:o,triggerRef:n}){const[c,d]=r.useState(""),[g,p]=r.useState(!1),f=r.useRef(null);return r.useEffect(()=>{d(s.chat?.title??""),p(!1)},[s.chat?.chatId,s.chat?.title]),r.useEffect(()=>{const j=E=>{const B=E.target;B instanceof Node&&(f.current?.contains(B)||n.current?.contains(B)||a())};return document.addEventListener("pointerdown",j),()=>{document.removeEventListener("pointerdown",j)}},[a,n]),e.jsxs("div",{"aria-label":"任务列表",className:"make-ai-assistant__conversation-controls",id:t,ref:f,role:"dialog",children:[e.jsxs("div",{className:"make-ai-assistant__conversation-heading",children:[e.jsx("span",{children:"最近对话"}),e.jsx("button",{"aria-label":"刷新任务列表",className:"make-ai-assistant__conversation-refresh",disabled:s.busy,type:"button",onClick:()=>{s.refresh()},children:"刷新"})]}),e.jsxs("nav",{"aria-label":"对话列表",className:"make-ai-assistant__conversation-list",children:[s.chats.map(j=>e.jsxs("div",{className:"make-ai-assistant__conversation-row",children:[e.jsxs("button",{type:"button","aria-pressed":s.chat?.chatId===j.chatId,onClick:()=>{a(),s.select(j)},children:[e.jsx(xs,{}),e.jsx("span",{children:j.title||"未命名对话"})]}),e.jsx("button",{type:"button",disabled:s.busy,"aria-label":`${j.pinned?"取消置顶":"置顶"} ${j.title}`,onClick:()=>{s.update({pinned:!j.pinned},j)},children:j.pinned?"★":"☆"})]},j.chatId)),!s.loading&&!s.chats.length?e.jsx("p",{children:"暂无对话,发送消息即可新建"}):null,s.listCursor?e.jsx("button",{className:"make-ai-assistant__conversation-more",type:"button",onClick:()=>{s.refresh(s.listCursor)},children:"更多对话"}):null]}),s.chat?e.jsxs("details",{className:"make-ai-assistant__conversation-management",children:[e.jsx("summary",{children:"管理当前对话"}),e.jsxs("div",{className:"make-ai-assistant__conversation-actions",children:[e.jsx("input",{"aria-label":"对话标题",maxLength:255,value:c,onChange:j=>d(j.currentTarget.value)}),e.jsx("button",{type:"button",disabled:s.busy||!c.trim(),onClick:()=>{s.update({title:c})},children:"保存标题"}),e.jsx("button",{type:"button",disabled:s.busy,onClick:()=>p(!0),children:"删除对话"}),g?e.jsxs("div",{role:"group","aria-label":"确认删除对话",children:[e.jsxs("span",{children:["删除“",s.chat.title,"”?"]}),e.jsx("button",{type:"button",disabled:s.busy,onClick:()=>{p(!1),s.remove()},children:"确认删除"}),e.jsx("button",{type:"button",onClick:()=>p(!1),children:"保留"})]}):null,s.historyMore?e.jsx("button",{type:"button",disabled:s.loading,onClick:()=>{s.moreHistory()},children:"继续加载历史"}):null,s.historyTruncated||s.state.historyTruncated?e.jsx("p",{children:"当前展示有界消息窗口,可重新选择对话从头读取。"}):null]})]}):null,s.error?e.jsxs("div",{className:"make-ai-assistant__conversation-error",role:"alert",children:[e.jsx("span",{children:s.error}),e.jsx("button",{type:"button",onClick:()=>{s.retry()},children:"恢复对话"})]}):null,o?e.jsxs("button",{className:"make-ai-assistant__conversation-new",type:"button",onClick:o,children:[e.jsx(ys,{}),e.jsx("span",{children:"新建对话"})]}):null]})}function js({message:t,manager:s}){const[a,o]=r.useState(!1),[n,c]=r.useState(""),[d,g]=r.useState(""),p=s.feedbackBusy.includes(t.id);if(!t.persistent||t.role!=="assistant"||t.intermediate)return null;const f=t.feedback?.rating??"none";return e.jsxs("div",{className:"make-ai-assistant__feedback","aria-label":"回答反馈",children:[e.jsx("button",{type:"button","aria-label":"点赞","aria-pressed":f==="like",disabled:p,onClick:()=>{s.feedback(t,f==="like"?"none":"like")},children:"赞"}),e.jsx("button",{type:"button","aria-label":"点踩","aria-pressed":f==="dislike",disabled:p,onClick:()=>{if(f==="dislike"){s.feedback(t,"none");return}c(t.feedback?.reason??""),g(t.feedback?.comment??""),o(!0)},children:"踩"}),f==="dislike"?e.jsx("button",{type:"button",disabled:p,onClick:()=>{c(t.feedback?.reason??""),g(t.feedback?.comment??""),o(!0)},children:"修改反馈"}):null,a?e.jsxs("form",{onSubmit:j=>{j.preventDefault(),s.feedback(t,"dislike",n,d).then(E=>{E&&o(!1)})},children:[e.jsx("input",{"aria-label":"反馈原因",maxLength:128,value:n,onChange:j=>c(j.currentTarget.value),placeholder:"原因(可选)"}),e.jsx("textarea",{"aria-label":"反馈说明",maxLength:4e3,value:d,onChange:j=>g(j.currentTarget.value),placeholder:"补充说明(可选)"}),e.jsx("button",{type:"submit",disabled:p,children:"提交反馈"}),e.jsx("button",{type:"button",onClick:()=>o(!1),children:"取消"})]}):null]})}const Mt=new Set(["image/png","image/jpeg","image/webp","image/gif","audio/mpeg","audio/wav","audio/ogg","audio/webm","video/mp4","video/webm","video/ogg"]);function _s({part:t,context:s,transport:a,chatId:o}){const[n,c]=r.useState(),[d,g]=r.useState(),[p,f]=r.useState(!1),j=r.useRef([]),E=r.useRef(void 0);r.useEffect(()=>()=>{E.current?.abort(),j.current.forEach(H=>URL.revokeObjectURL(H))},[]);const B=async H=>{if(!a.readContent||p)return;const y=new AbortController;E.current=y,f(!0),g(void 0);try{const V=await a.readContent(s,{chatId:o,contentRef:t.media.contentRef},{signal:y.signal});if(y.signal.aborted)return;const Q=new Blob([new Uint8Array(V).buffer],{type:H&&Mt.has(t.media.contentType)?t.media.contentType:"application/octet-stream"}),W=URL.createObjectURL(Q);if(j.current.push(W),H)c(W);else{const v=document.createElement("a");v.href=W,v.download=t.name??"attachment",v.click()}}catch(V){y.signal.aborted||g(ht(V))}finally{y.signal.aborted||f(!1)}};return e.jsxs("div",{className:"make-ai-assistant__attachment",children:[e.jsxs("span",{children:[t.name??"附件"," · ",t.media.sizeBytes," 字节"]}),e.jsx("button",{type:"button",disabled:p,onClick:()=>{B(!1)},children:"下载附件"}),Mt.has(t.media.contentType)?e.jsx("button",{type:"button",disabled:p,onClick:()=>{B(!0)},children:"预览附件"}):null,d?e.jsx("span",{role:"alert",children:d}):null,n&&t.kind==="image"?e.jsx("img",{src:n,alt:t.name??"附件图片"}):null,n&&t.kind==="audio"?e.jsx("audio",{src:n,controls:!0}):null,n&&t.kind==="video"?e.jsx("video",{src:n,controls:!0}):null]})}function ks({message:t,context:s,transport:a,chatId:o}){return e.jsx(e.Fragment,{children:t.parts?.map((n,c)=>n.kind==="text"?null:e.jsx(_s,{part:n,context:s,transport:a,chatId:o},n.id??`${t.id}:${c}`))})}const Is=(t,s)=>new Promise((a,o)=>{const n=new FileReader,c=()=>s.removeEventListener("abort",d),d=()=>{n.abort(),c(),o(Object.assign(new Error("Read aborted"),{name:"AbortError"}))};if(s.aborted){d();return}s.addEventListener("abort",d,{once:!0}),n.onload=()=>{c(),a(new Uint8Array(n.result))},n.onerror=()=>{c(),o(new Error("无法读取文件"))},n.readAsArrayBuffer(t)});function As(t,s,a){const[o,n]=r.useState([]),c=r.useRef(new Map),d=r.useRef(Promise.resolve()),g=s.scopeKey?.(t)??t.app.id,p=r.useRef(g);p.current=g;const f=r.useRef(void 0),j=a.enabled&&s.features?.attachments===!0,E=(u,l)=>{!c.current.has(u.draft.id)||u.scope!==p.current||(u.draft={...u.draft,...l},n([...c.current.values()].map(T=>T.draft)))},B=()=>{for(const u of c.current.values())u.controller.abort();c.current.clear(),n([]),f.current=void 0,d.current=Promise.resolve()};r.useEffect(()=>(B(),B),[g,s]),r.useEffect(()=>{f.current&&a.chat?.chatId!==f.current&&B()},[a.chat?.chatId]);const H=async u=>{const l=u.controller.signal,T=()=>{if(l.aborted||u.scope!==p.current||!c.current.has(u.draft.id))throw Object.assign(new Error("Upload aborted"),{name:"AbortError"})};try{if(T(),u.file.size>64<<20)throw new Error("文件不能超过 64 MiB");const N=await a.ensureChat();T(),f.current=N.chatId;const ae=u.file.type.split(";")[0].trim().toLowerCase()||"application/octet-stream";E(u,{status:"uploading",error:void 0});let R=u.draft.upload?await s.getUpload(t,{chatId:N.chatId,uploadId:u.draft.upload.id},{signal:l}):await s.startUpload(t,{chatId:N.chatId,fileId:u.draft.fileId,name:u.file.name,contentType:ae,sizeBytes:u.file.size},{signal:l});if(T(),E(u,{upload:R}),R.name!==u.file.name||R.contentType!==ae||R.sizeBytes!==u.file.size)throw new Error("上传文件身份不一致");if(R.status!=="ready"){R=await s.getUpload(t,{chatId:N.chatId,uploadId:R.id},{signal:l}),T();const G=new Set(R.completedParts),K=Math.ceil(u.file.size/R.partSize);for(let L=0;L<K;L+=1){if(T(),!G.has(L)){const q=await Is(u.file.slice(L*R.partSize,Math.min(u.file.size,(L+1)*R.partSize)),l);T(),await s.uploadPart(t,{chatId:N.chatId,uploadId:R.id,part:L,bytes:q},{signal:l}),T(),G.add(L)}E(u,{progress:G.size/Math.max(K,1)})}E(u,{status:"completing"}),R=await s.completeUpload(t,{chatId:N.chatId,uploadId:R.id},{signal:l}),T()}if(R.status!=="ready"||!R.content)throw new Error("上传尚未完成");E(u,{status:"ready",progress:1,upload:R})}catch(N){E(u,{status:l.aborted?"paused":"failed",error:l.aborted?void 0:ht(N)})}},y=u=>{if(j){if(u.length+c.current.size>32){a.setError("每条消息最多包含 32 个附件或文本片段");return}for(const l of u){const T={id:Oe(),fileId:Oe(),name:l.name,size:l.size,status:"queued",progress:0},N={draft:T,file:l,controller:new AbortController,scope:g};c.current.set(T.id,N),d.current=d.current.then(()=>H(N))}n([...c.current.values()].map(l=>l.draft))}},V=u=>{const l=c.current.get(u);!l||!["paused","failed"].includes(l.draft.status)||(l.controller=new AbortController,E(l,{status:"queued"}),d.current=d.current.then(()=>H(l)))},Q=u=>{c.current.get(u)?.controller.abort(),c.current.delete(u),n([...c.current.values()].map(T=>T.draft))},W=u=>c.current.get(u)?.controller.abort(),v=o.flatMap(u=>{const l=u.upload;if(u.status!=="ready"||!l?.content)return[];const T=l.contentType.startsWith("image/")&&l.contentType!=="image/svg+xml"?"image":l.contentType.startsWith("audio/")?"audio":l.contentType.startsWith("video/")?"video":"file";return[{id:u.id,kind:T,name:l.name,media:{contentRef:l.content.contentRef,contentType:l.contentType,sizeBytes:l.content.sizeBytes,digestSha256:l.content.digestSha256}}]});return{enabled:j,drafts:o,parts:v,pending:o.some(u=>u.status!=="ready"),add:y,retry:V,remove:Q,pause:W,clear:B}}function ws({attachments:t,onOpenChange:s,open:a,triggerRef:o}){const n=r.useRef(null),c=r.useRef(null),d=r.useRef(null);r.useEffect(()=>{if(!a)return;const p=f=>{const j=f.target;j instanceof Node&&!n.current?.contains(j)&&s(!1)};return document.addEventListener("pointerdown",p),()=>{document.removeEventListener("pointerdown",p)}},[s,a]);const g=p=>{t.add(Array.from(p.files??[])),p.value="",s(!1)};return e.jsxs("div",{className:"make-ai-assistant__attachment-composer",ref:n,children:[e.jsx("button",{"aria-expanded":a,"aria-haspopup":"menu","aria-label":"添加附件",className:"make-ai-assistant__attachment-trigger",ref:o,title:"添加附件",type:"button",onClick:()=>s(!a),children:e.jsx("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:e.jsx("path",{d:"M12 5v14M5 12h14"})})}),a?e.jsxs("div",{"aria-label":"附件选项",className:"make-ai-assistant__attachment-menu",role:"menu",children:[e.jsxs("button",{role:"menuitem",type:"button",onClick:()=>c.current?.click(),children:[e.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[e.jsx("rect",{height:"15",rx:"2",width:"18",x:"3",y:"4.5"}),e.jsx("circle",{cx:"8.5",cy:"9",r:"1.5"}),e.jsx("path",{d:"m5.5 17 4.2-4.2 2.8 2.7 2.2-2.1 3.8 3.6"})]}),e.jsx("span",{children:"上传图片"})]}),e.jsxs("button",{role:"menuitem",type:"button",onClick:()=>d.current?.click(),children:[e.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[e.jsx("path",{d:"M7 3.5h7l4 4V20H7z"}),e.jsx("path",{d:"M14 3.5v4h4M10 12h5M10 15h5"})]}),e.jsx("span",{children:"上传文件"})]})]}):null,e.jsx("input",{accept:"image/*","aria-label":"上传图片",hidden:!0,multiple:!0,ref:c,type:"file",onChange:p=>g(p.currentTarget)}),e.jsx("input",{"aria-label":"上传文件",hidden:!0,multiple:!0,ref:d,type:"file",onChange:p=>g(p.currentTarget)})]})}function Ts({attachments:t}){return t.drafts.length?e.jsx("div",{className:"make-ai-assistant__attachment-drafts","aria-label":"待发送附件",children:e.jsx("ul",{children:t.drafts.map(s=>e.jsxs("li",{children:[e.jsxs("span",{children:[s.name," ·"," ",s.status==="ready"?"已上传":s.status==="completing"?"校验中":s.status==="paused"?"已暂停":s.status==="failed"?"上传失败":`${Math.round(s.progress*100)}%`]}),s.error?e.jsx("span",{role:"alert",children:s.error}):null,s.status==="failed"||s.status==="paused"?e.jsx("button",{type:"button",onClick:()=>t.retry(s.id),children:"重试上传"}):null,s.status==="uploading"?e.jsx("button",{type:"button",onClick:()=>t.pause(s.id),children:"暂停上传"}):null,e.jsx("button",{type:"button",onClick:()=>t.remove(s.id),children:"移除附件"})]},s.id))})}):null}const Ms=t=>`${t}-${Date.now()}-${Math.random().toString(36).slice(2,9)}`,Rs="Make",Cs=["总结当前页面数据","找出需要关注的记录","列出我有权限查看的数据对象"],Ut=(t,s)=>s??`${t?.trim()||Rs} AI 助手`,Ss=t=>t??Cs,Es=/^只读分析\s*[·•]\s*/u,Ns=(t,s)=>t?.trim().replace(Es,"").trim()||`当前对象:${s??"未命名应用"}`,Ls=480,Ht=1024,$s=.72,Rt=16,pe=16,We=8,lt=(t,s,a)=>Math.min(Math.max(t,Math.min(s,a)),a),Ds=t=>typeof t=="number"&&Number.isFinite(t)&&t>0?t:void 0,Os=(t,s,a)=>{const o=Math.min(Ht,a*$s);return Math.max(t,Math.min(s??o,a))},Ct=(t,s,a)=>Math.min(Math.max(t,s),Math.max(s,a)),Fs=(t,s,a,o)=>{const n=Math.min(Math.max(s.width,1),Math.max(1,o-pe*2)),c=Math.min(Math.max(s.height,1),Math.max(1,a-pe*2)),d=t.left+t.width/2,g=t.top+t.height/2,f=[{left:t.right+We,placement:"right",top:g-c/2},{left:t.left-We-n,placement:"left",top:g-c/2},{left:d-n/2,placement:"bottom",top:t.bottom+We},{left:d-n/2,placement:"top",top:t.top-We-c}].find(({left:j,top:E})=>j>=pe&&E>=pe&&j+n<=o-pe&&E+c<=a-pe);return f||{left:Ct(d-n/2,pe,o-pe-n),placement:"bottom",top:Ct(t.bottom+We,pe,a-pe-c)}},Ps=t=>typeof t=="number"?Number.isFinite(t)?`${t}px`:void 0:t?.trim()||void 0;class Z extends Error{}const rt=(t,s)=>{if(!(typeof t!="object"||t===null))return t[s]},Bs=t=>{const s=rt(t,"status");return typeof s=="number"?s:rt(rt(t,"response"),"status")},zs=t=>{const s=rt(t,"code"),a=Bs(t),o=t instanceof Error?t.message:"",n=[s,o].filter(p=>typeof p=="string").join(" ").toLowerCase(),d=globalThis.navigator?.onLine===!1||/network|fetch|timeout|offline|connection|网络|连接|超时/.test(n),g=typeof a=="number"&&a>=500||/server|service|服务器|服务异常/.test(n);return d?{actionLabel:"重新连接",description:"请检查网络后再试。",kind:"network",label:"网络连接",title:"网络连接不可用"}:g?{actionLabel:"重新加载",description:"服务暂时未能响应,请稍后重试。",kind:"service",label:"服务异常",title:"服务暂时不可用"}:{actionLabel:"重新加载",description:"请稍后重试;若问题持续出现,请联系管理员。",kind:"unknown",label:"加载异常",title:"暂时无法加载对话"}},St=t=>{try{const s=t?.return?.();if(!s)return;Promise.resolve(s).catch(a=>{console.error("[make-ai-assistant] transport iterator close failed",{errorType:a instanceof Error?a.name:typeof a})})}catch(s){console.error("[make-ai-assistant] transport iterator close failed",{errorType:s instanceof Error?s.name:typeof s})}},Us=async t=>{if(globalThis.navigator?.clipboard?.writeText){await globalThis.navigator.clipboard.writeText(t);return}if(typeof document>"u"||!document.body)throw new Error("Clipboard API is unavailable");const s=document.createElement("textarea");s.value=t,s.setAttribute("readonly",""),s.style.position="fixed",s.style.inset="0 auto auto 0",s.style.opacity="0",document.body.append(s),s.select();const a=document.execCommand("copy");if(s.remove(),!a)throw new Error("Clipboard copy failed")},Kt=()=>e.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[e.jsx("path",{d:"M12 2.8c.5 4.4 2.8 6.8 7.2 7.2-4.4.5-6.8 2.8-7.2 7.2-.5-4.4-2.8-6.8-7.2-7.2 4.4-.5 6.8-2.8 7.2-7.2Z"}),e.jsx("path",{d:"M18.3 16.1c.2 1.8 1.2 2.8 3 3-1.8.2-2.8 1.2-3 3-.2-1.8-1.2-2.8-3-3 1.8-.2 2.8-1.2 3-3Z"})]}),Hs=()=>e.jsx("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:e.jsx("path",{d:"m6 6 12 12M18 6 6 18"})}),Ks=()=>e.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[e.jsx("path",{d:"M8 8h10v12H8z"}),e.jsx("path",{d:"M6 16H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})]}),Vs=()=>e.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[e.jsx("path",{d:"M20 11a8 8 0 0 0-14.7-4.4L4 8"}),e.jsx("path",{d:"M4 4v4h4"}),e.jsx("path",{d:"M4 13a8 8 0 0 0 14.7 4.4L20 16"}),e.jsx("path",{d:"M20 20v-4h-4"})]}),Ws=()=>e.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[e.jsx("circle",{cx:"12",cy:"12",r:"8"}),e.jsx("path",{d:"M9.8 9.4a2.35 2.35 0 1 1 3.93 1.73c-.96.86-1.73 1.42-1.73 2.87"}),e.jsx("path",{d:"M12 17h.01"})]}),qs=()=>e.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[e.jsx("path",{d:"M12 4v11"}),e.jsx("path",{d:"m7 10 5 5 5-5"}),e.jsx("path",{d:"M5 20h14"})]}),Xs=()=>e.jsx("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:e.jsx("path",{d:"M12 5v14M5 12h14"})}),Ys=()=>e.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[e.jsx("path",{d:"M10 6h9M10 12h9M10 18h9"}),e.jsx("path",{d:"M5 6h.01M5 12h.01M5 18h.01"})]}),Zs=()=>e.jsx("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:e.jsx("path",{d:"m7 10 5 5 5-5"})}),Et=()=>e.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[e.jsx("path",{d:"m4 4 17 8-17 8 3-8-3-8Z"}),e.jsx("path",{d:"M7 12h14"})]}),Vt=()=>e.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[e.jsx("path",{d:"M20 11a8 8 0 0 0-14.7-4.4L4 8"}),e.jsx("path",{d:"M4 4v4h4"}),e.jsx("path",{d:"M4 13a8 8 0 0 0 14.7 4.4L20 16"}),e.jsx("path",{d:"M20 20v-4h-4"})]}),Gs=()=>e.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[e.jsx("circle",{cx:"12",cy:"12",r:"8"}),e.jsx("path",{d:"M12 8v4.5"}),e.jsx("path",{d:"M12 16h.01"})]}),it=({className:t=""})=>e.jsx("span",{className:`make-ai-assistant__avatar ${t}`.trim(),"aria-hidden":"true",children:e.jsx(Kt,{})}),Js=({src:t})=>t?e.jsx("span",{className:"make-ai-assistant__user-avatar","aria-hidden":"true",children:e.jsx("img",{alt:"",src:t})}):null,Qs=({userAvatarUrl:t,userName:s})=>{const a=s?.trim();return!a&&!t?null:e.jsxs("div",{className:"make-ai-assistant__message-identity",children:[a?e.jsx("span",{className:"make-ai-assistant__message-sender",children:a}):null,e.jsx(Js,{src:t})]})},dt=t=>{const s=t.trim();if(!(!s.startsWith("|")||!s.endsWith("|")))return s.slice(1,-1).split("|").map(a=>a.trim())},ea=t=>t.length>0&&t.every(s=>/^:?-{3,}:?$/.test(s)),ta=(t,s)=>{const a=dt(t[s]??""),o=dt(t[s+1]??"");if(!a||!o||a.length!==o.length||!ea(o))return;const n=[];let c=s+2;for(;c<t.length;){const d=dt(t[c]??"");if(!d||d.length!==a.length)break;n.push(d),c+=1}return{headers:a,lastIndex:c-1,rows:n}},sa=t=>{const s=[],a=[],o=[],n=[],c=t.replace(/\r\n?/g,`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),i=require("react"),Ae=require("./index.cjs"),v=require("./conversation-Cvh-IVRV.cjs"),Rt=e=>e?.trim()||void 0,ge=(e,s)=>Rt(e)??s,ct=e=>{const s=Rt(e?.primary);if(s)return{"--make-ai-theme-primary":s,"--make-ai-theme-primary-hover":ge(e?.primaryHover,"color-mix(in srgb, var(--make-ai-theme-primary) 84%, #15233d)"),"--make-ai-theme-on-primary":ge(e?.onPrimary,"#fcfcff"),"--make-ai-theme-bg":ge(e?.background,"color-mix(in srgb, var(--make-ai-theme-primary) 2%, #fcfcff)"),"--make-ai-theme-surface":ge(e?.surface,"color-mix(in srgb, var(--make-ai-theme-primary) 4%, var(--make-ai-theme-bg))"),"--make-ai-theme-surface-strong":ge(e?.surfaceStrong,"color-mix(in srgb, var(--make-ai-theme-primary) 8%, var(--make-ai-theme-bg))"),"--make-ai-theme-text":ge(e?.text,"color-mix(in srgb, var(--make-ai-theme-primary) 12%, #252631)"),"--make-ai-theme-text-secondary":ge(e?.textSecondary,"color-mix(in srgb, var(--make-ai-theme-text) 74%, var(--make-ai-theme-primary))"),"--make-ai-theme-border":ge(e?.border,"color-mix(in srgb, var(--make-ai-theme-primary) 14%, var(--make-ai-theme-bg))"),"--make-ai-theme-overlay":ge(e?.overlay,"color-mix(in srgb, var(--make-ai-theme-text) 88%, var(--make-ai-theme-primary))"),"--make-ai-theme-on-overlay":ge(e?.onOverlay,"#fcfcff")}},bt=(e,s)=>!s||!i.isValidElement(e)||typeof e.type!="string"?e:i.cloneElement(e,{style:{...e.props.style,...s}});function St({artifact:e,context:s,fallback:a,onAction:o,onActionError:r,registry:c,theme:d}){const f=ct(d),g=Ae.resolveArtifactTemplate(c,e,s);if(!g){const $=a?a(e):t.jsxs("section",{className:"make-ai-artifact make-ai-artifact--unsupported",role:"status",children:[t.jsx("strong",{children:"暂不支持展示此结果"}),t.jsxs("span",{children:["结果类型:",e.kind]})]});return bt($,f)}const h={context:s,onAction:o,onActionError:r,theme:d,themeStyle:f},_=g.template.render(e,s,h);return bt(_,f)}const Ie=(e,s,a)=>{if(e==null||e==="")return"—";if(typeof e=="boolean")return e?"是":"否";if(typeof e!="number")return`${e}${s?.unit??""}`;const o=s?.precision,r={maximumFractionDigits:o??2,minimumFractionDigits:o};s?.style==="currency"&&s.currency?(r.style="currency",r.currency=s.currency):s?.style==="percent"&&(r.style="percent");try{const c=s?.style==="percent"?e/100:e;return`${new Intl.NumberFormat(a,r).format(c)}${s?.unit??""}`}catch{return`${e}${s?.unit??""}`}},Ct=e=>{let s=Number.POSITIVE_INFINITY,a=Number.NEGATIVE_INFINITY;for(const o of e)s=Math.min(s,o),a=Math.max(a,o);return Number.isFinite(s)&&Number.isFinite(a)?{min:s,max:a}:{min:0,max:0}},Et=(e,s,a)=>{if(!a.onAction)return;const o=c=>{console.error("[make-ai-assistant] host action error handler failed",{actionId:e.id,artifactId:s.artifact.id,errorType:c instanceof Error?c.name:typeof c,intent:e.intent})},r=c=>{if(a.onActionError){try{Promise.resolve(a.onActionError(c,e,s)).catch(o)}catch(d){o(d)}return}console.error("[make-ai-assistant] host action failed",{actionId:e.id,artifactId:s.artifact.id,errorType:c instanceof Error?c.name:typeof c,intent:e.intent})};try{Promise.resolve(a.onAction(e,s)).catch(r)}catch(c){r(c)}},Te=(e,s)=>e.actions?.length&&s.onAction?t.jsx("div",{className:"make-ai-artifact__actions",children:e.actions.map(a=>t.jsxs("button",{className:`make-ai-artifact__action make-ai-artifact__action--${a.appearance??"link"}`,type:"button",onClick:()=>Et(a,{artifact:e,context:s.context},s),children:[a.label,t.jsx("span",{"aria-hidden":"true",children:"→"})]},a.id))}):null,Ne=(e,s,a="",o)=>t.jsxs("section",{"aria-label":e.title??`${e.kind} result`,className:`make-ai-artifact ${a}`.trim(),"data-artifact-density":e.presentation?.density,"data-artifact-kind":e.kind,style:o,children:[e.title?t.jsx("h4",{className:"make-ai-artifact__title",children:e.title}):null,e.summary?t.jsx("p",{className:"make-ai-artifact__summary",children:e.summary}):null,s]}),Vt=({artifact:e,renderContext:s})=>{const a=e.data.delta,o=a?Ie(a.value,a.format==="percent"?{style:"percent"}:void 0,s.context.locale):void 0;return Ne(e,t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"make-ai-artifact__metric-value",children:Ie(e.data.value,e.data.format,s.context.locale)}),a?t.jsxs("div",{className:`make-ai-artifact__delta make-ai-artifact__delta--${a.direction??"flat"}`,children:[t.jsx("span",{"aria-hidden":"true",children:a.direction==="up"?"↗":a.direction==="down"?"↘":"→"}),t.jsx("span",{children:o}),a.label?t.jsx("span",{children:a.label}):null]}):null,e.data.context?t.jsx("p",{className:"make-ai-artifact__context",children:e.data.context}):null,Te(e,s)]}),"make-ai-artifact--metric",s.themeStyle)},qt=({artifact:e,renderContext:s})=>Ne(e,t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"make-ai-artifact__comparison",children:e.data.items.map(a=>t.jsxs("div",{className:"make-ai-artifact__comparison-item",children:[t.jsx("span",{children:a.label}),t.jsx("strong",{children:Ie(a.value,a.format,s.context.locale)}),a.hint?t.jsx("small",{children:a.hint}):null]},a.id))}),Te(e,s)]}),"make-ai-artifact--comparison",s.themeStyle),Ht=({artifact:e,renderContext:s})=>{const a=e.data.series.flatMap(d=>d.points.map(f=>f.y)),{max:o,min:r}=Ct(a),c=o-r||1;return Ne(e,t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"make-ai-artifact__trend",children:e.data.series.map(d=>t.jsxs("div",{className:"make-ai-artifact__trend-series",children:[t.jsx("div",{className:"make-ai-artifact__trend-label",children:d.label}),t.jsx("div",{className:"make-ai-artifact__trend-bars",children:d.points.map((f,g)=>{const h=18+(f.y-r)/c*70;return t.jsxs("div",{className:"make-ai-artifact__trend-point",children:[t.jsx("span",{"aria-label":`${f.x}: ${Ie(f.y,d.format,s.context.locale)}`,className:"make-ai-artifact__trend-bar",role:"img",style:{height:`${h}%`},title:`${f.x}: ${Ie(f.y,d.format,s.context.locale)}`}),t.jsx("small",{children:f.x})]},`${f.x}-${g}`)})})]},d.id))}),Te(e,s)]}),"make-ai-artifact--trend",s.themeStyle)},Xt=({artifact:e,renderContext:s})=>{const{max:a}=Ct(e.data.items.map(r=>Math.abs(r.value))),o=Math.max(a,1);return Ne(e,t.jsxs(t.Fragment,{children:[t.jsx("ol",{className:"make-ai-artifact__ranking",children:e.data.items.map((r,c)=>t.jsxs("li",{children:[t.jsx("span",{className:"make-ai-artifact__rank",children:c+1}),t.jsxs("span",{className:"make-ai-artifact__ranking-label",children:[t.jsx("span",{children:r.label}),r.description?t.jsx("small",{children:r.description}):null]}),t.jsx("span",{className:"make-ai-artifact__ranking-track","aria-hidden":"true",children:t.jsx("span",{style:{width:`${Math.abs(r.value)/o*100}%`}})}),t.jsx("strong",{children:Ie(r.value,r.format,s.context.locale)})]},r.id))}),Te(e,s)]}),"make-ai-artifact--ranking",s.themeStyle)},Zt=(e,s)=>s.action??{id:`open-${s.id}`,label:s.title??s.id,intent:"open-record",target:{entityKey:e.data.entity.key,recordId:s.id}},Gt=({artifact:e,renderContext:s})=>Ne(e,t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"make-ai-artifact__record-list",children:e.data.records.length===0?t.jsx("p",{className:"make-ai-artifact__empty",children:"没有符合条件的记录"}):e.data.records.map(a=>{const o=Zt(e,a),r=t.jsxs(t.Fragment,{children:[t.jsx("strong",{children:a.title??a.id}),t.jsx("span",{className:"make-ai-artifact__record-values",children:e.data.columns.map(c=>t.jsxs("span",{children:[t.jsx("small",{children:c.label}),Ie(a.values[c.key],c.format,s.context.locale)]},c.key))}),s.onAction?t.jsx("span",{"aria-hidden":"true",children:"›"}):null]});return s.onAction?t.jsx("button",{className:"make-ai-artifact__record",type:"button",onClick:()=>Et(o,{artifact:e,context:s.context},s),children:r},a.id):t.jsx("div",{className:"make-ai-artifact__record",children:r},a.id)})}),e.data.total!==void 0?t.jsxs("p",{className:"make-ai-artifact__record-total",children:["共 ",e.data.total," 条"]}):null,Te(e,s)]}),"make-ai-artifact--record-list",s.themeStyle),Yt=({artifact:e,renderContext:s})=>Ne(e,t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:`make-ai-artifact__notice make-ai-artifact__notice--${e.data.tone}`,children:[t.jsx("span",{"aria-hidden":"true",children:e.data.tone==="success"?"✓":e.data.tone==="warning"?"!":e.data.tone==="danger"?"×":"i"}),t.jsx("p",{children:e.data.body})]}),Te(e,s)]}),"make-ai-artifact--notice",s.themeStyle),Ce=(e,s,a)=>({id:e,kinds:[s],priority:0,render:a}),Jt=[Ce("platform.metric.default","metric",(e,s,a)=>t.jsx(Vt,{artifact:e,renderContext:a})),Ce("platform.comparison.default","comparison",(e,s,a)=>t.jsx(qt,{artifact:e,renderContext:a})),Ce("platform.trend.default","trend",(e,s,a)=>t.jsx(Ht,{artifact:e,renderContext:a})),Ce("platform.ranking.default","ranking",(e,s,a)=>t.jsx(Xt,{artifact:e,renderContext:a})),Ce("platform.record-list.default","record-list",(e,s,a)=>t.jsx(Gt,{artifact:e,renderContext:a})),Ce("platform.notice.default","notice",(e,s,a)=>t.jsx(Yt,{artifact:e,renderContext:a}))],Tt=Ae.createArtifactTemplateRegistry(Jt).templates,Nt=(e=Tt)=>Ae.createArtifactTemplateRegistry(e),Ee=()=>globalThis.crypto.randomUUID(),lt=e=>{const s=e,a=s?.status??s?.response?.status;return a===409?"数据已变化或对话仍在运行,请刷新后重试":a===401||s?.code==="AI_AUTH_REQUIRED"||s?.code==="AI_AUTH_EXPIRED"?"登录已失效,请重新登录":a===403?"当前账号无权访问该对话":a===404?"对话或回答已不可见,请刷新列表":s?.message?.startsWith("输入内容过长")?s.message:"操作未完成,请重试或刷新对话"};function Qt(e,s){const a=s.features?.conversationManagement===!0,o=a?s.scopeKey?.(e)??e.app.id:"",r=i.useRef(o);r.current=o;const c=i.useRef(o),[d,f]=i.useState(v.createAssistantConversationState),g=i.useRef(d),h=n=>{const m=typeof n=="function"?n(g.current):n;g.current=m,f(m)},[_,$]=i.useState([]),[A,H]=i.useState(),M=i.useRef(void 0),[O,y]=i.useState(""),[N,B]=i.useState(-1),[p,l]=i.useState(!1),[C,R]=i.useState(!1),[ee,S]=i.useState(a),[X,Z]=i.useState(!1),[D,J]=i.useState(),[ue,me]=i.useState([]),[F,ae]=i.useState([]),ie=i.useRef(new Set),W=i.useRef(new Map),L=i.useRef(0),k=i.useRef(0),z=i.useRef(0),te=i.useRef(void 0),he=i.useRef(void 0),we=i.useRef(new Map),E=(n,m=o)=>k.current===n&&r.current===m,Q=()=>{const n=new AbortController;return ie.current.add(n),n},oe=n=>ie.current.delete(n),ce=n=>{M.current=n,H(n)},Le=()=>{for(const n of W.current.values())n.abort();W.current.clear()},G=n=>{n instanceof Error&&n.name==="AbortError"||(console.warn("[make-ai-assistant] conversation operation failed",{errorType:n instanceof Error?n.name:typeof n}),J(lt(n)))},ne=async n=>{if(!a||!s.listConversations)return;const m=k.current,x=++z.current,b=Q();try{const I=await s.listConversations(e,{cursor:n},{signal:b.signal});if(!E(m)||b.signal.aborted||x!==z.current)return;$(T=>[...new Map([...n?T:[],...I.chats].map(j=>[j.chatId,j])).values()]),y(I.nextCursor)}catch(I){E(m)&&!b.signal.aborted&&G(I)}finally{oe(b),E(m)&&S(!1)}},le=async(n,m,x)=>{const b=k.current,I=L.current;let T;try{for await(const j of n){if(!E(b)||m.signal.aborted||I!==L.current||M.current?.chatId!==x)return;const V=v.parseAssistantEvent(j);if(V.type==="response.accepted"||V.type==="response.state"){T=V.responseId;const K=W.current.get(T);if(K&&K!==m){V.type==="response.accepted"&&h(P=>v.reduceAssistantEvent(P,V)),m.abort();return}W.current.set(T,m)}h(K=>v.reduceAssistantEvent(K,V)),V.type==="response.terminal"&&(me(K=>K.filter(P=>P!==V.responseId)),ne())}}catch(j){E(b)&&!m.signal.aborted&&I===L.current&&(G(j),T||h(V=>({...V,status:Object.values(V.responses??{}).some(K=>!v.isResponseTerminal(K.status))?"streaming":"error"})))}finally{T&&W.current.get(T)===m&&W.current.delete(T),oe(m)}},ye=async(n,m,x,b)=>{if(!s.getResponse||!s.watchResponse)return;const I=new Set(n.filter(j=>j.role==="assistant"&&j.persistent).map(j=>j.responseId)),T=[...new Map(n.filter(j=>j.role==="user"&&j.responseId&&!I.has(j.responseId)).map(j=>[j.responseId,j.cursor??-1])).entries()].slice(-20);for(const[j,V]of T){if(!E(b)||x!==L.current)return;if(W.current.has(j))continue;const K=Q();try{const P=await s.getResponse(e,{chatId:m,responseId:j},{signal:K.signal});if(!E(b)||K.signal.aborted||x!==L.current||W.current.has(j))continue;h(pe=>v.reduceAssistantEvent(pe,v.isResponseTerminal(P.status)?{type:"response.snapshot",snapshot:P}:{type:"response.state",chatId:m,responseId:j,status:P.status})),P.status==="failed"||P.status==="cancelled"?h(pe=>v.reduceAssistantEvent(pe,{type:"response.terminal",chatId:m,responseId:j,status:P.status})):(W.current.set(j,K),le(s.watchResponse(e,{chatId:m,responseId:j,historyCursor:V},{signal:K.signal}),K,m))}catch(P){E(b)&&!K.signal.aborted&&G(P)}finally{W.current.get(j)!==K&&oe(K)}}},$e=async n=>{const m=++L.current,x=k.current,b=Q();Le(),J(void 0),S(!0),me([]),he.current=void 0,ce(n),h({messages:[],status:"idle",threadId:n.chatId}),B(-1),l(!1),R(!1);try{const[I,T]=await Promise.all([s.getConversation(e,{chatId:n.chatId},{signal:b.signal}),s.loadConversation(e,{threadId:n.chatId,cursor:-1,signal:b.signal})]);if(!E(x)||b.signal.aborted||m!==L.current)return;if(I.chatId!==n.chatId||T.threadId!==n.chatId)throw new Error("Conversation mismatch");ce(I),h(v.createAssistantConversationState(T)),B(T.nextCursor??-1),l(T.hasMore??!1),ye(T.messages,n.chatId,m,x)}catch(I){E(x)&&!b.signal.aborted&&m===L.current&&G(I)}finally{oe(b),E(x)&&m===L.current&&S(!1)}},xe=async()=>{if(M.current)return M.current;if(te.current??={requestId:Ee()},te.current.promise)return te.current.promise;const n=k.current,m=L.current,x=Q(),b=te.current;return Z(!0),b.promise=s.createConversation(e,{requestId:b.requestId},{signal:x.signal}).then(I=>{if(!E(n)||x.signal.aborted||m!==L.current)throw Object.assign(new Error("Stale create"),{name:"AbortError"});return te.current=void 0,ce(I),h({messages:[],status:"idle",threadId:I.chatId}),ne(),I}).finally(()=>{oe(x),b.promise=void 0,E(n)&&Z(!1)}),b.promise},We=async()=>{if(!(X||te.current?.promise)){L.current+=1,Le(),ce(void 0),J(void 0),he.current=void 0,h(v.createAssistantConversationState()),l(!1),B(-1);try{await xe()}catch(n){G(n)}}},De=async n=>{const m=Q();he.current=n,J(void 0),g.current.messages.some(x=>x.id===n.message.id)||h(x=>v.appendUserMessage(x,n.message)),await le(s.run(n,{signal:m.signal}),m,n.threadId)},Oe=async(n,m)=>{if(!(!n.trim()&&!m?.length))try{const x=await xe(),b={id:Ee(),content:n,...m?{parts:m}:{}};await De({threadId:x.chatId,message:b,context:e,capabilities:{artifactSchemaVersions:[],artifactKinds:[],templates:[]}})}catch(x){G(x)}},Ve=async()=>{const n=he.current;if(!n||n.threadId!==M.current?.chatId){M.current&&await $e(M.current);return}const m=g.current.messages.find(x=>x.id===n.message.id);if(m?.responseId&&s.watchResponse){const x=m.responseId;if(W.current.has(x))return;const b=Q();W.current.set(x,b),J(void 0),await le(s.watchResponse(e,{chatId:n.threadId,responseId:x,historyCursor:m.cursor},{signal:b.signal}),b,n.threadId)}else await De(n)},fe=async(n=g.current.activeRunId)=>{const m=M.current;if(!m||!n||!s.cancelResponse||ue.includes(n))return;const x=k.current,b=L.current,I=Q();me(T=>[...T,n]),J(void 0);try{const T=await s.cancelResponse(e,{chatId:m.chatId,responseId:n},{signal:I.signal});if(!E(x)||b!==L.current)return;if(v.isResponseTerminal(T.status))h(j=>v.reduceAssistantEvent(j,{type:"response.snapshot",snapshot:T})),me(j=>j.filter(V=>V!==n));else if(!W.current.has(n)&&s.watchResponse){const j=Q();W.current.set(n,j),le(s.watchResponse(e,{chatId:m.chatId,responseId:n},{signal:j.signal}),j,m.chatId)}}catch(T){E(x)&&b===L.current&&(G(T),me(j=>j.filter(V=>V!==n)))}finally{oe(I)}},qe=async(n,m=M.current)=>{if(!m||X)return;const x=k.current,b=Q();Z(!0),J(void 0);try{const I=await s.updateConversation(e,{chatId:m.chatId,expectedRevision:m.revision,...n},{signal:b.signal});if(!E(x))return;M.current?.chatId===I.chatId&&ce(I),await ne()}catch(I){if(E(x)){G(I);try{const T=await s.getConversation(e,{chatId:m.chatId},{signal:b.signal});E(x)&&M.current?.chatId===m.chatId&&ce(T)}catch{}ne()}}finally{oe(b),E(x)&&Z(!1)}},He=async(n=M.current)=>{if(!n||X)return;const m=k.current,x=Q();Z(!0),J(void 0);try{if(await s.deleteConversation(e,{chatId:n.chatId,expectedRevision:n.revision},{signal:x.signal}),!E(m))return;M.current?.chatId===n.chatId&&(L.current+=1,Le(),ce(void 0),h(v.createAssistantConversationState())),await ne()}catch(b){E(m)&&G(b)}finally{oe(x),E(m)&&Z(!1)}},Xe=async(n,m,x="",b="")=>{const I=M.current;if(!I||!n.persistent||!s.setFeedback||F.includes(n.id))return;const T={chatId:I.chatId,messageId:n.id,rating:m,...x?{reason:x}:{},...b?{comment:b}:{}},j=we.current.get(n.id),{requestId:V,...K}=j??{requestId:""},P=j&&JSON.stringify(K)===JSON.stringify(T)?j:{...T,requestId:Ee()};we.current.set(n.id,P);const pe=k.current,Fe=L.current,Ge=Q();ae(ve=>[...ve,n.id]),J(void 0);try{const ve=await s.setFeedback(e,P,{signal:Ge.signal});return!E(pe)||Fe!==L.current||we.current.get(n.id)!==P?void 0:(h(be=>({...be,messages:be.messages.map(Me=>Me.id===n.id&&ve.revision>=(Me.feedback?.revision??0)?{...Me,feedback:ve}:Me)})),we.current.delete(n.id),!0)}catch(ve){return E(pe)&&Fe===L.current&&G(ve),!1}finally{oe(Ge),E(pe)&&ae(ve=>ve.filter(be=>be!==n.id))}},Ze=async()=>{if(!M.current||!p||ee)return;const n=k.current,m=L.current,x=M.current,b=Q();S(!0);try{const I=await s.loadConversation(e,{threadId:x.chatId,cursor:N,signal:b.signal});if(!E(n)||m!==L.current)return;const T=v.createAssistantConversationState(I),j=[...new Map([...g.current.messages,...T.messages].map(P=>[P.id,P])).values()];let V=0;const K=[];for(const P of j.slice(-200).reverse()){if(V+=[...P.content].length,V>1e6)break;K.unshift(P)}K.length<j.length&&R(!0),h(P=>({...P,messages:K})),B(I.nextCursor??N),l(I.hasMore??!1),ye(I.messages,x.chatId,m,n)}catch(I){E(n)&&G(I)}finally{oe(b),E(n)&&S(!1)}};i.useEffect(()=>(k.current+=1,c.current=o,te.current=void 0,he.current=void 0,we.current.clear(),ce(void 0),$([]),y(""),h(v.createAssistantConversationState()),J(void 0),S(a),Z(!1),me([]),ae([]),a&&ne(),()=>{k.current+=1,L.current+=1;for(const n of ie.current)n.abort();ie.current.clear(),W.current.clear()}),[a,o,s]);const _e=c.current===o;return{enabled:a,state:_e?d:v.createAssistantConversationState(),setState:h,chats:_e?_:[],chat:_e?A:void 0,listCursor:O,historyMore:p,historyTruncated:C,loading:!_e||ee,busy:X,error:_e?D:void 0,cancelling:ue,feedbackBusy:F,refresh:ne,select:$e,create:We,ensureChat:xe,send:Oe,retry:Ve,stop:fe,update:qe,remove:He,feedback:Xe,moreHistory:Ze,setError:J}}const es=()=>t.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[t.jsx("path",{d:"M5 5.5h14v10H9l-4 3v-13Z"}),t.jsx("path",{d:"M8 9h8M8 12h6"})]}),ts=()=>t.jsx("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:t.jsx("path",{d:"M12 5v14M5 12h14"})});function ss({id:e,manager:s,onDismiss:a,onNewConversation:o,triggerRef:r}){const[c,d]=i.useState(""),[f,g]=i.useState(!1),h=i.useRef(null);return i.useEffect(()=>{d(s.chat?.title??""),g(!1)},[s.chat?.chatId,s.chat?.title]),i.useEffect(()=>{const _=$=>{const A=$.target;A instanceof Node&&(h.current?.contains(A)||r.current?.contains(A)||a())};return document.addEventListener("pointerdown",_),()=>{document.removeEventListener("pointerdown",_)}},[a,r]),t.jsxs("div",{"aria-label":"任务列表",className:"make-ai-assistant__conversation-controls",id:e,ref:h,role:"dialog",children:[t.jsxs("div",{className:"make-ai-assistant__conversation-heading",children:[t.jsx("span",{children:"最近对话"}),t.jsx("button",{"aria-label":"刷新任务列表",className:"make-ai-assistant__conversation-refresh",disabled:s.busy,type:"button",onClick:()=>{s.refresh()},children:"刷新"})]}),t.jsxs("nav",{"aria-label":"对话列表",className:"make-ai-assistant__conversation-list",children:[s.chats.map(_=>t.jsxs("div",{className:"make-ai-assistant__conversation-row",children:[t.jsxs("button",{type:"button","aria-pressed":s.chat?.chatId===_.chatId,onClick:()=>{a(),s.select(_)},children:[t.jsx(es,{}),t.jsx("span",{children:_.title||"未命名对话"})]}),t.jsx("button",{type:"button",disabled:s.busy,"aria-label":`${_.pinned?"取消置顶":"置顶"} ${_.title}`,onClick:()=>{s.update({pinned:!_.pinned},_)},children:_.pinned?"★":"☆"})]},_.chatId)),!s.loading&&!s.chats.length?t.jsx("p",{children:"暂无对话,发送消息即可新建"}):null,s.listCursor?t.jsx("button",{className:"make-ai-assistant__conversation-more",type:"button",onClick:()=>{s.refresh(s.listCursor)},children:"更多对话"}):null]}),s.chat?t.jsxs("details",{className:"make-ai-assistant__conversation-management",children:[t.jsx("summary",{children:"管理当前对话"}),t.jsxs("div",{className:"make-ai-assistant__conversation-actions",children:[t.jsx("input",{"aria-label":"对话标题",maxLength:255,value:c,onChange:_=>d(_.currentTarget.value)}),t.jsx("button",{type:"button",disabled:s.busy||!c.trim(),onClick:()=>{s.update({title:c})},children:"保存标题"}),t.jsx("button",{type:"button",disabled:s.busy,onClick:()=>g(!0),children:"删除对话"}),f?t.jsxs("div",{role:"group","aria-label":"确认删除对话",children:[t.jsxs("span",{children:["删除“",s.chat.title,"”?"]}),t.jsx("button",{type:"button",disabled:s.busy,onClick:()=>{g(!1),s.remove()},children:"确认删除"}),t.jsx("button",{type:"button",onClick:()=>g(!1),children:"保留"})]}):null,s.historyMore?t.jsx("button",{type:"button",disabled:s.loading,onClick:()=>{s.moreHistory()},children:"继续加载历史"}):null,s.historyTruncated||s.state.historyTruncated?t.jsx("p",{children:"当前展示有界消息窗口,可重新选择对话从头读取。"}):null]})]}):null,s.error?t.jsxs("div",{className:"make-ai-assistant__conversation-error",role:"alert",children:[t.jsx("span",{children:s.error}),t.jsx("button",{type:"button",onClick:()=>{s.retry()},children:"恢复对话"})]}):null,o?t.jsxs("button",{className:"make-ai-assistant__conversation-new",type:"button",onClick:o,children:[t.jsx(ts,{}),t.jsx("span",{children:"新建对话"})]}):null]})}function as({message:e,manager:s}){const[a,o]=i.useState(!1),[r,c]=i.useState(""),[d,f]=i.useState(""),g=s.feedbackBusy.includes(e.id);if(!e.persistent||e.role!=="assistant"||e.intermediate)return null;const h=e.feedback?.rating??"none";return t.jsxs("div",{className:"make-ai-assistant__feedback","aria-label":"回答反馈",children:[t.jsx("button",{type:"button","aria-label":"点赞","aria-pressed":h==="like",disabled:g,onClick:()=>{s.feedback(e,h==="like"?"none":"like")},children:"赞"}),t.jsx("button",{type:"button","aria-label":"点踩","aria-pressed":h==="dislike",disabled:g,onClick:()=>{if(h==="dislike"){s.feedback(e,"none");return}c(e.feedback?.reason??""),f(e.feedback?.comment??""),o(!0)},children:"踩"}),h==="dislike"?t.jsx("button",{type:"button",disabled:g,onClick:()=>{c(e.feedback?.reason??""),f(e.feedback?.comment??""),o(!0)},children:"修改反馈"}):null,a?t.jsxs("form",{onSubmit:_=>{_.preventDefault(),s.feedback(e,"dislike",r,d).then($=>{$&&o(!1)})},children:[t.jsx("input",{"aria-label":"反馈原因",maxLength:128,value:r,onChange:_=>c(_.currentTarget.value),placeholder:"原因(可选)"}),t.jsx("textarea",{"aria-label":"反馈说明",maxLength:4e3,value:d,onChange:_=>f(_.currentTarget.value),placeholder:"补充说明(可选)"}),t.jsx("button",{type:"submit",disabled:g,children:"提交反馈"}),t.jsx("button",{type:"button",onClick:()=>o(!1),children:"取消"})]}):null]})}const jt=new Set(["image/png","image/jpeg","image/webp","image/gif","audio/mpeg","audio/wav","audio/ogg","audio/webm","video/mp4","video/webm","video/ogg"]);function ns({part:e,context:s,transport:a,chatId:o}){const[r,c]=i.useState(),[d,f]=i.useState(),[g,h]=i.useState(!1),_=i.useRef([]),$=i.useRef(void 0);i.useEffect(()=>()=>{$.current?.abort(),_.current.forEach(H=>URL.revokeObjectURL(H))},[]);const A=async H=>{if(!a.readContent||g)return;const M=new AbortController;$.current=M,h(!0),f(void 0);try{const O=await a.readContent(s,{chatId:o,contentRef:e.media.contentRef},{signal:M.signal});if(M.signal.aborted)return;const y=new Blob([new Uint8Array(O).buffer],{type:H&&jt.has(e.media.contentType)?e.media.contentType:"application/octet-stream"}),N=URL.createObjectURL(y);if(_.current.push(N),H)c(N);else{const B=document.createElement("a");B.href=N,B.download=e.name??"attachment",B.click()}}catch(O){M.signal.aborted||f(lt(O))}finally{M.signal.aborted||h(!1)}};return t.jsxs("div",{className:"make-ai-assistant__attachment",children:[t.jsxs("span",{children:[e.name??"附件"," · ",e.media.sizeBytes," 字节"]}),a.readContent?t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",disabled:g,onClick:()=>{A(!1)},children:"下载附件"}),jt.has(e.media.contentType)?t.jsx("button",{type:"button",disabled:g,onClick:()=>{A(!0)},children:"预览附件"}):null]}):null,d?t.jsx("span",{role:"alert",children:d}):null,r&&e.kind==="image"?t.jsx("img",{src:r,alt:e.name??"附件图片"}):null,r&&e.kind==="audio"?t.jsx("audio",{src:r,controls:!0}):null,r&&e.kind==="video"?t.jsx("video",{src:r,controls:!0}):null]})}function rs({message:e,context:s,transport:a,chatId:o}){return t.jsx(t.Fragment,{children:e.parts?.map((r,c)=>r.kind==="text"?null:t.jsx(ns,{part:r,context:s,transport:a,chatId:o},r.id??`${e.id}:${c}`))})}const is=e=>e.type.split(";")[0].trim().toLowerCase()||"application/octet-stream",os=e=>e.startsWith("image/")&&e!=="image/svg+xml"?"image":e.startsWith("audio/")?"audio":e.startsWith("video/")?"video":"file",cs=(e,s)=>new Promise((a,o)=>{const r=new FileReader,c=()=>s.removeEventListener("abort",d),d=()=>{r.abort(),c(),o(Object.assign(new Error("Read aborted"),{name:"AbortError"}))};if(s.aborted){d();return}s.addEventListener("abort",d,{once:!0}),r.onload=()=>{c(),a(new Uint8Array(r.result))},r.onerror=()=>{c(),o(new Error("无法读取文件"))},r.readAsArrayBuffer(e)});function ls(e,s,a){const[o,r]=i.useState([]),c=i.useRef(new Map),d=i.useRef(Promise.resolve()),f=s.scopeKey?.(e)??e.app.id,g=i.useRef(f);g.current=f;const h=i.useRef(void 0),_=a.enabled&&s.features?.attachments===!0,$=(p,l)=>{!c.current.has(p.draft.id)||p.scope!==g.current||(p.draft={...p.draft,...l},r([...c.current.values()].map(C=>C.draft)))},A=()=>{for(const p of c.current.values())p.controller.abort();c.current.clear(),r([]),h.current=void 0,d.current=Promise.resolve()};i.useEffect(()=>(A(),A),[f,s]),i.useEffect(()=>{h.current&&a.chat?.chatId!==h.current&&A()},[a.chat?.chatId]);const H=async p=>{const l=p.controller.signal,C=()=>{if(l.aborted||p.scope!==g.current||!c.current.has(p.draft.id))throw Object.assign(new Error("Upload aborted"),{name:"AbortError"})};try{if(C(),p.file.size>64<<20)throw new Error("文件不能超过 64 MiB");const R=await a.ensureChat();C(),h.current=R.chatId;const ee=is(p.file);$(p,{status:"uploading",error:void 0});let S=p.draft.upload?await s.getUpload(e,{chatId:R.chatId,uploadId:p.draft.upload.id},{signal:l}):await s.startUpload(e,{chatId:R.chatId,fileId:p.draft.fileId,name:p.file.name,contentType:ee,sizeBytes:p.file.size},{signal:l});if(C(),$(p,{upload:S}),S.name!==p.file.name||S.contentType!==ee||S.sizeBytes!==p.file.size)throw new Error("上传文件身份不一致");if(S.status!=="ready"){S=await s.getUpload(e,{chatId:R.chatId,uploadId:S.id},{signal:l}),C();const X=new Set(S.completedParts),Z=Math.ceil(p.file.size/S.partSize);for(let D=0;D<Z;D+=1){if(C(),!X.has(D)){const J=await cs(p.file.slice(D*S.partSize,Math.min(p.file.size,(D+1)*S.partSize)),l);C(),await s.uploadPart(e,{chatId:R.chatId,uploadId:S.id,part:D,bytes:J},{signal:l}),C(),X.add(D)}$(p,{progress:X.size/Math.max(Z,1)})}$(p,{status:"completing"}),S=await s.completeUpload(e,{chatId:R.chatId,uploadId:S.id},{signal:l}),C()}if(S.status!=="ready"||!S.content)throw new Error("上传尚未完成");$(p,{status:"ready",progress:1,upload:S})}catch(R){$(p,{status:l.aborted?"paused":"failed",error:l.aborted?void 0:lt(R)})}},M=p=>{if(_){if(p.length+c.current.size>32){a.setError("每条消息最多包含 32 个附件或文本片段");return}for(const l of p){const C={id:Ee(),fileId:Ee(),name:l.name,size:l.size,status:"queued",progress:0},R={draft:C,file:l,controller:new AbortController,scope:f};c.current.set(C.id,R),d.current=d.current.then(()=>H(R))}r([...c.current.values()].map(l=>l.draft))}},O=p=>{const l=c.current.get(p);!l||!["paused","failed"].includes(l.draft.status)||(l.controller=new AbortController,$(l,{status:"queued"}),d.current=d.current.then(()=>H(l)))},y=p=>{c.current.get(p)?.controller.abort(),c.current.delete(p),r([...c.current.values()].map(C=>C.draft))},N=p=>c.current.get(p)?.controller.abort(),B=o.flatMap(p=>{const l=p.upload;if(p.status!=="ready"||!l?.content)return[];const C=os(l.contentType);return[{id:p.id,kind:C,name:l.name,media:{contentRef:l.content.contentRef,contentType:l.contentType,sizeBytes:l.content.sizeBytes,digestSha256:l.content.digestSha256}}]});return{enabled:_,drafts:o,parts:B,pending:o.some(p=>p.status!=="ready"),add:M,retry:O,remove:y,pause:N,clear:A}}function ds({attachments:e,onOpenChange:s,open:a,triggerRef:o}){const r=i.useRef(null),c=i.useRef(null);i.useEffect(()=>{if(!a)return;const f=g=>{const h=g.target;h instanceof Node&&!r.current?.contains(h)&&s(!1)};return document.addEventListener("pointerdown",f),()=>{document.removeEventListener("pointerdown",f)}},[s,a]);const d=f=>{e.add(Array.from(f.files??[])),f.value="",s(!1)};return t.jsxs("div",{className:"make-ai-assistant__attachment-composer",ref:r,children:[t.jsx("button",{"aria-expanded":a,"aria-haspopup":"menu","aria-label":"添加附件",className:"make-ai-assistant__attachment-trigger",ref:o,title:"添加附件",type:"button",onClick:()=>s(!a),children:t.jsx("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:t.jsx("path",{d:"M12 5v14M5 12h14"})})}),a?t.jsx("div",{"aria-label":"附件选项",className:"make-ai-assistant__attachment-menu",role:"menu",children:t.jsxs("button",{role:"menuitem",type:"button",onClick:()=>c.current?.click(),children:[t.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[t.jsx("path",{d:"M12 15V4M7.5 8.5 12 4l4.5 4.5"}),t.jsx("path",{d:"M5 14v5h14v-5"})]}),t.jsx("span",{children:"上传文件或图片"})]})}):null,t.jsx("input",{"aria-label":"上传文件或图片",hidden:!0,multiple:!0,ref:c,type:"file",onChange:f=>d(f.currentTarget)})]})}function us({attachments:e}){return e.drafts.length?t.jsx("div",{className:"make-ai-assistant__attachment-drafts","aria-label":"待发送附件",children:t.jsx("ul",{children:e.drafts.map(s=>t.jsxs("li",{children:[t.jsxs("span",{children:[s.name," ·"," ",s.status==="ready"?"已上传":s.status==="completing"?"校验中":s.status==="paused"?"已暂停":s.status==="failed"?"上传失败":`${Math.round(s.progress*100)}%`]}),s.error?t.jsx("span",{role:"alert",children:s.error}):null,s.status==="failed"||s.status==="paused"?t.jsx("button",{type:"button",onClick:()=>e.retry(s.id),children:"重试上传"}):null,s.status==="uploading"?t.jsx("button",{type:"button",onClick:()=>e.pause(s.id),children:"暂停上传"}):null,t.jsx("button",{type:"button",onClick:()=>e.remove(s.id),children:"移除附件"})]},s.id))})}):null}const ms=e=>`${e}-${Date.now()}-${Math.random().toString(36).slice(2,9)}`,hs="Make",fs=["总结当前页面数据","找出需要关注的记录","列出我有权限查看的数据对象"],Lt=(e,s)=>s??`${e?.trim()||hs} AI 助手`,ps=e=>e??fs,vs=480,$t=1024,gs=.72,_t=16,rt=(e,s,a)=>Math.min(Math.max(e,Math.min(s,a)),a),ys=e=>typeof e=="number"&&Number.isFinite(e)&&e>0?e:void 0,xs=(e,s,a)=>{const o=Math.min($t,a*gs);return Math.max(e,Math.min(s??o,a))},bs=e=>typeof e=="number"?Number.isFinite(e)?`${e}px`:void 0:e?.trim()||void 0;class Y extends Error{}const tt=(e,s)=>{if(!(typeof e!="object"||e===null))return e[s]},js=e=>{const s=tt(e,"status");return typeof s=="number"?s:tt(tt(e,"response"),"status")},_s=e=>{const s=tt(e,"code"),a=js(e),o=e instanceof Error?e.message:"",r=[s,o].filter(g=>typeof g=="string").join(" ").toLowerCase(),d=globalThis.navigator?.onLine===!1||/network|fetch|timeout|offline|connection|网络|连接|超时/.test(r),f=typeof a=="number"&&a>=500||/server|service|服务器|服务异常/.test(r);return d?{actionLabel:"重新连接",description:"请检查网络后再试。",kind:"network",label:"网络连接",title:"网络连接不可用"}:f?{actionLabel:"重新加载",description:"服务暂时未能响应,请稍后重试。",kind:"service",label:"服务异常",title:"服务暂时不可用"}:{actionLabel:"重新加载",description:"请稍后重试;若问题持续出现,请联系管理员。",kind:"unknown",label:"加载异常",title:"暂时无法加载对话"}},kt=e=>{try{const s=e?.return?.();if(!s)return;Promise.resolve(s).catch(a=>{console.error("[make-ai-assistant] transport iterator close failed",{errorType:a instanceof Error?a.name:typeof a})})}catch(s){console.error("[make-ai-assistant] transport iterator close failed",{errorType:s instanceof Error?s.name:typeof s})}},ks=async e=>{if(globalThis.navigator?.clipboard?.writeText){await globalThis.navigator.clipboard.writeText(e);return}if(typeof document>"u"||!document.body)throw new Error("Clipboard API is unavailable");const s=document.createElement("textarea");s.value=e,s.setAttribute("readonly",""),s.style.position="fixed",s.style.inset="0 auto auto 0",s.style.opacity="0",document.body.append(s),s.select();const a=document.execCommand("copy");if(s.remove(),!a)throw new Error("Clipboard copy failed")},Dt=()=>t.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[t.jsx("path",{d:"M12 2.8c.5 4.4 2.8 6.8 7.2 7.2-4.4.5-6.8 2.8-7.2 7.2-.5-4.4-2.8-6.8-7.2-7.2 4.4-.5 6.8-2.8 7.2-7.2Z"}),t.jsx("path",{d:"M18.3 16.1c.2 1.8 1.2 2.8 3 3-1.8.2-2.8 1.2-3 3-.2-1.8-1.2-2.8-3-3 1.8-.2 2.8-1.2 3-3Z"})]}),Is=()=>t.jsx("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:t.jsx("path",{d:"m6 6 12 12M18 6 6 18"})}),As=()=>t.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[t.jsx("path",{d:"M8 8h10v12H8z"}),t.jsx("path",{d:"M6 16H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})]}),ws=()=>t.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[t.jsx("path",{d:"M20 11a8 8 0 0 0-14.7-4.4L4 8"}),t.jsx("path",{d:"M4 4v4h4"}),t.jsx("path",{d:"M4 13a8 8 0 0 0 14.7 4.4L20 16"}),t.jsx("path",{d:"M20 20v-4h-4"})]}),Ms=()=>t.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[t.jsx("path",{d:"M12 4v11"}),t.jsx("path",{d:"m7 10 5 5 5-5"}),t.jsx("path",{d:"M5 20h14"})]}),Rs=()=>t.jsx("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:t.jsx("path",{d:"M12 5v14M5 12h14"})}),Ss=()=>t.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[t.jsx("path",{d:"M10 6h9M10 12h9M10 18h9"}),t.jsx("path",{d:"M5 6h.01M5 12h.01M5 18h.01"})]}),Cs=()=>t.jsx("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:t.jsx("path",{d:"m7 10 5 5 5-5"})}),It=()=>t.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[t.jsx("path",{d:"m4 4 17 8-17 8 3-8-3-8Z"}),t.jsx("path",{d:"M7 12h14"})]}),Ot=()=>t.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[t.jsx("path",{d:"M20 11a8 8 0 0 0-14.7-4.4L4 8"}),t.jsx("path",{d:"M4 4v4h4"}),t.jsx("path",{d:"M4 13a8 8 0 0 0 14.7 4.4L20 16"}),t.jsx("path",{d:"M20 20v-4h-4"})]}),Es=()=>t.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[t.jsx("circle",{cx:"12",cy:"12",r:"8"}),t.jsx("path",{d:"M12 8v4.5"}),t.jsx("path",{d:"M12 16h.01"})]}),st=({className:e=""})=>t.jsx("span",{className:`make-ai-assistant__avatar ${e}`.trim(),"aria-hidden":"true",children:t.jsx(Dt,{})}),Ts=({src:e})=>e?t.jsx("span",{className:"make-ai-assistant__user-avatar","aria-hidden":"true",children:t.jsx("img",{alt:"",src:e})}):null,Ns=({userAvatarUrl:e,userName:s})=>{const a=s?.trim();return!a&&!e?null:t.jsxs("div",{className:"make-ai-assistant__message-identity",children:[a?t.jsx("span",{className:"make-ai-assistant__message-sender",children:a}):null,t.jsx(Ts,{src:e})]})},it=e=>{const s=e.trim();if(!(!s.startsWith("|")||!s.endsWith("|")))return s.slice(1,-1).split("|").map(a=>a.trim())},Ls=e=>e.length>0&&e.every(s=>/^:?-{3,}:?$/.test(s)),$s=(e,s)=>{const a=it(e[s]??""),o=it(e[s+1]??"");if(!a||!o||a.length!==o.length||!Ls(o))return;const r=[];let c=s+2;for(;c<e.length;){const d=it(e[c]??"");if(!d||d.length!==a.length)break;r.push(d),c+=1}return{headers:a,lastIndex:c-1,rows:r}},Ds=e=>{const s=[],a=[],o=[],r=[],c=e.replace(/\r\n?/g,`
2
2
  `).split(`
3
- `),d=()=>{const f=a.join(`
4
- `).trim();a.length=0,f&&s.push({type:"paragraph",text:f})},g=()=>{o.length&&s.push({type:"list",items:o.splice(0)})},p=()=>{const f=n.join(`
5
- `).trim();n.length=0,f&&s.push({type:"pre",text:f})};for(let f=0;f<c.length;f+=1){const j=c[f]??"",E=j.trim();if(!E){d(),g(),p();continue}const B=ta(c,f);if(B){d(),g(),p(),s.push({headers:B.headers,rows:B.rows,type:"table"}),f=B.lastIndex;continue}const H=/^(#{1,6})\s+(.+)$/.exec(E);if(H){d(),g(),p();const V=(H[2]??"").replace(/\s+#+\s*$/,"").trim();V&&s.push({type:"heading",level:H[1]?.length,text:V});continue}if(/^\s*\|.+\|\s*$/.test(j)){d(),g(),n.push(j.trim());continue}const y=/^\s*[-*]\s+(.+)$/.exec(j);if(y){d(),p(),o.push(y[1]?.trim()??"");continue}g(),p(),a.push(E)}return d(),g(),p(),s},qe=t=>{const s=[],a=/(\*\*[^*]+\*\*|`[^`]+`)/g;let o=0;for(const n of t.matchAll(a)){const c=n[0],d=n.index??0;d>o&&s.push(t.slice(o,d)),c.startsWith("**")?s.push(e.jsx("strong",{children:c.slice(2,-2)},`${d}-strong`)):s.push(e.jsx("code",{children:c.slice(1,-1)},`${d}-code`)),o=d+c.length}return o<t.length&&s.push(t.slice(o)),s},Nt=({content:t})=>{const s=sa(t);return s.length?e.jsx("div",{className:"make-ai-assistant__bubble make-ai-assistant__assistant-text",children:s.map((a,o)=>{if(a.type==="heading"){const n=a.level<=2?"h3":"h4";return e.jsx(n,{className:`make-ai-assistant__markdown-heading make-ai-assistant__markdown-heading--${a.level}`,children:qe(a.text)},`${o}-heading`)}return a.type==="paragraph"?e.jsx("p",{children:qe(a.text)},`${o}-paragraph`):a.type==="pre"?e.jsx("pre",{children:e.jsx("code",{children:a.text})},`${o}-pre`):a.type==="table"?e.jsx("div",{"aria-label":"表格内容,可横向滚动",className:"make-ai-assistant__markdown-table-scroll",role:"region",tabIndex:0,children:e.jsxs("table",{className:"make-ai-assistant__markdown-table",children:[e.jsx("thead",{children:e.jsx("tr",{children:a.headers.map((n,c)=>e.jsx("th",{scope:"col",children:qe(n)},`${c}-${n}`))})}),e.jsx("tbody",{children:a.rows.map((n,c)=>e.jsx("tr",{children:n.map((d,g)=>e.jsx("td",{children:qe(d)},`${g}-${d}`))},`${c}-${n.join("|")}`))})]})},`${o}-table`):e.jsx("ul",{children:a.items.map((n,c)=>e.jsx("li",{children:qe(n)},`${c}-${n}`))},`${o}-list`)})}):null},Wt=({assistantName:t})=>e.jsxs("div",{className:"make-ai-assistant__message-identity",children:[e.jsx(it,{className:"make-ai-assistant__avatar--message"}),e.jsx("span",{className:"make-ai-assistant__message-sender",children:t})]}),qt=t=>{for(let s=t.messages.length-1;s>=0;s-=1){const a=t.messages[s];if(a.role==="assistant"&&a.status==="streaming")return a.id}},aa=t=>{for(let s=t.messages.length-1;s>=0;s-=1)if(t.messages[s].role==="user")return s;return-1},Xt=t=>{const s=aa(t);if(!(s<0))for(let a=t.messages.length-1;a>s;a-=1){const o=t.messages[a];if(o.role==="assistant")return o.id}},na=t=>{if(t.status==="idle")for(let s=t.messages.length-1;s>=0;s-=1){const a=t.messages[s];if(a.role==="assistant"&&a.status==="complete")return a.id}},ra=t=>{for(let s=t.messages.length-1;s>=0;s-=1){const a=t.messages[s];if(a.role==="user")return a}},ia=(t,s)=>{const a=t.messages.findIndex(o=>o.id===s&&o.role==="user");return{...t,error:void 0,progress:void 0,status:"streaming",messages:a<0?t.messages:t.messages.slice(0,a+1)}},oa=t=>t.scrollHeight-t.scrollTop-t.clientHeight<=48,Lt=(t="smooth")=>globalThis.matchMedia?.("(prefers-reduced-motion: reduce)").matches?"auto":t,ut=(t,s)=>{typeof t.scrollTo=="function"?t.scrollTo({top:t.scrollHeight,behavior:s}):t.scrollTop=t.scrollHeight},Yt=({error:t,onRetry:s})=>e.jsxs("div",{className:"make-ai-assistant__message-status make-ai-assistant__message-status--error","data-error-presentation":"request-failed",role:"alert",children:[e.jsxs("div",{className:"make-ai-assistant__message-status-header",children:[e.jsx("span",{className:"make-ai-assistant__message-status-icon","aria-hidden":"true",children:e.jsx(Gs,{})}),e.jsx("strong",{children:"请求未完成"})]}),e.jsx("span",{className:"make-ai-assistant__message-status-message",children:t.message}),t.retryable&&s?e.jsxs("button",{className:"make-ai-assistant__retry",type:"button",onClick:s,children:[e.jsx(Vt,{}),"重新发送"]}):null]}),ca=({error:t,onRetry:s})=>{const a=zs(t);return e.jsxs("section",{"aria-live":"assertive",className:"make-ai-assistant__load-failure","data-load-failure-kind":a.kind,role:"alert",children:[e.jsx("span",{className:"make-ai-assistant__load-failure-icon","aria-hidden":"true",children:e.jsxs("svg",{viewBox:"0 0 24 24",children:[e.jsx("path",{d:"M5 12a7 7 0 0 1 13.4-2.8A4.5 4.5 0 0 1 18 18H7.5A4.5 4.5 0 0 1 5 12Z"}),e.jsx("path",{d:"m9.2 14.8 5.6-5.6M9.2 9.2l5.6 5.6"})]})}),e.jsxs("div",{className:"make-ai-assistant__load-failure-copy",children:[e.jsx("span",{className:"make-ai-assistant__load-failure-label",children:a.label}),e.jsx("h3",{children:a.title}),e.jsx("p",{children:a.description})]}),e.jsxs("button",{className:"make-ai-assistant__retry make-ai-assistant__retry--primary",type:"button",onClick:s,children:[e.jsx(Vt,{}),a.actionLabel]})]})},Zt=({active:t,steps:s})=>{if(!t||!s?.length)return null;const a=s[s.length-1]??"处理中";return e.jsxs("details",{className:"make-ai-assistant__process",open:!0,children:[e.jsxs("summary",{children:[e.jsxs("span",{className:"make-ai-assistant__progress",role:"status",children:[e.jsx("span",{"aria-hidden":"true"}),e.jsx("span",{children:a})]}),e.jsxs("span",{className:"make-ai-assistant__process-count",children:[s.length," 步"]})]}),e.jsx("ol",{children:s.map((o,n)=>e.jsxs("li",{"data-step-active":n===s.length-1?!0:void 0,children:[e.jsx("span",{"aria-hidden":"true"}),e.jsx("span",{children:o})]},`${n}-${o}`))})]})},la=({copyFeedback:t,onCopy:s,onRegenerate:a})=>!s&&!a?null:e.jsxs("div",{className:"make-ai-assistant__reply-actions","aria-label":"回复操作",children:[s?e.jsx("button",{"aria-label":"复制回答",className:"make-ai-assistant__reply-action make-ai-assistant__reply-copy","data-tooltip":"复制",type:"button",onClick:s,children:e.jsx(Ks,{})}):null,a?e.jsx("button",{"aria-label":"重新生成",className:"make-ai-assistant__reply-action make-ai-assistant__reply-regenerate","data-tooltip":"重新生成",type:"button",onClick:a,children:e.jsx(Vs,{})}):null,t?e.jsx("span",{className:"make-ai-assistant__reply-feedback","data-copy-status":t.status,role:"status",children:t.message}):null]}),$t=({assistantName:t,error:s,onRetry:a,progress:o})=>{const n=s?"error":"progress";return s?.message??o?.message?e.jsx("article",{"aria-label":`${t}的${n==="error"?"错误消息":"状态消息"}`,className:`make-ai-assistant__message make-ai-assistant__message--assistant make-ai-assistant__message--${n}`,"data-message-role":"assistant","data-message-state":n,children:e.jsxs("div",{className:"make-ai-assistant__message-turn",children:[e.jsx(Wt,{assistantName:t}),e.jsx("div",{className:"make-ai-assistant__message-stack",children:s?e.jsx(Yt,{error:s,onRetry:a}):e.jsx(Zt,{active:!0,steps:o?.steps})})]})}):null},da=(t,s,a,o,n,c,d,g,p,f,j,E,B,H,y,V)=>{const Q=Xt(t),W=qt(t),v=na(t);let u;return t.messages.map(l=>{if(l.intermediate)return e.jsxs("details",{className:"make-ai-assistant__process",children:[e.jsx("summary",{children:"处理过程"}),e.jsx(Nt,{content:l.content})]},l.id);const T=l.role==="assistant",N=u;T||(u=l);const ae=l.id===W,R=l.id===Q?t.error:void 0,G=l.error??R,K=!T&&!!(p?.trim()||f),L=T?d:p?.trim()||"用户",q=T&&l.status==="complete"&&!G&&(l.content.trim()||l.id===v);return e.jsx("article",{"aria-label":`${L}的消息`,className:`make-ai-assistant__message make-ai-assistant__message--${l.role}`,"data-message-role":l.role,"data-message-state":G?"error":void 0,"data-message-status":l.status,"data-message-has-identity":T||K?!0:void 0,children:e.jsxs("div",{className:"make-ai-assistant__message-turn",children:[T?e.jsx(Wt,{assistantName:d}):K?e.jsx(Qs,{userAvatarUrl:f,userName:p}):null,e.jsxs("div",{className:"make-ai-assistant__message-stack",children:[T&&l.responseId&&t.responses?.[l.responseId]?.status==="cancelled"?e.jsx("p",{className:"make-ai-assistant__response-status",role:"status",children:"已停止生成"}):null,l.content?T?e.jsx(Nt,{content:l.content}):e.jsx("div",{className:"make-ai-assistant__bubble",children:l.content}):l.status==="streaming"?e.jsxs("div",{className:"make-ai-assistant__typing","aria-label":`${d}正在思考`,children:[e.jsx("span",{}),e.jsx("span",{}),e.jsx("span",{})]}):null,T?e.jsx(Zt,{active:ae&&t.status==="streaming",steps:l.progressSteps}):null,G?e.jsx(Yt,{error:G,onRetry:R?g:void 0}):null,l.artifacts.map(ne=>e.jsx(Ot,{artifact:ne,context:s,onAction:n,onActionError:c,registry:a,theme:o},ne.id)),y&&V&&t.threadId?e.jsx(ks,{message:l,context:s,transport:V,chatId:t.threadId}):null,y&&V?.features?.feedback?e.jsx(js,{message:l,manager:y}):null,q?e.jsx(la,{copyFeedback:j?.messageId===l.id?{message:j.message,status:j.status}:void 0,onCopy:l.content.trim()?()=>B(l.id,l.content):void 0,onRegenerate:E&&l.id===v&&N?()=>H({userMessage:N,assistantMessage:l}):void 0}):null]})]})},`${t.threadId??"local"}:${l.id}`)})};function Gt({assistantName:t="AI 助手",brandName:s,context:a,onAction:o,onActionError:n,onClose:c,onNewConversation:d,headerHeight:g,privacyNotice:p,registry:f,subtitle:j,suggestions:E,title:B,theme:H,transport:y,userAvatarUrl:V,userName:Q,visible:W}){const v=gs(a,y),u=As(a,y,v),l=Ut(s,B),T=p?.trim(),N=Ns(j,a.app.name),ae=Ps(g),R=mt(H),G=R||ae?{...R,...ae?{"--make-ai-internal-header-height":ae}:{}}:void 0,[K,L]=r.useState(""),[q,ne]=r.useState(!1),[re,de]=r.useState(!1),ye=v.enabled?y.scopeKey?.(a)??a.app.id:"";r.useLayoutEffect(()=>{v.enabled&&L("")},[ye,v.enabled]);const[be,X]=r.useState(x.createAssistantConversationState),k=v.enabled?v.state:be,b=v.enabled?v.setState:X,P=r.useRef(k);P.current=k;const[Y,ee]=r.useState(void 0),[Se,C]=r.useState(void 0),[te,ie]=r.useState(0),[ue,je]=r.useState(()=>y.loadConversation?"loading":"ready"),J=v.enabled?v.loading&&!k.messages.length?"loading":"ready":ue,[ve,_e]=r.useState(void 0),[Xe,oe]=r.useState(!1),[me,Ye]=r.useState(!1),[ke,Ze]=r.useState(void 0),Ie=r.useRef(void 0),Ae=r.useRef(void 0),we=r.useRef(0),Ge=r.useRef(null),Ee=r.useRef(null),Je=r.useRef(null),Te=r.useRef(null),i=r.useRef(null),h=r.useRef(null),_=r.useRef(null),A=r.useRef(null),w=r.useRef(!0),S=r.useRef(a.app.id),I=r.useRef(W),z=r.useId(),F=r.useId(),O=r.useMemo(()=>f??zt(),[f]),he=r.useMemo(()=>Ss(E),[E]),Be=()=>{const m=h.current,$=_.current;if(!m||!$||typeof window>"u")return;const D=Fs(m.getBoundingClientRect(),$.getBoundingClientRect(),window.innerHeight,window.innerWidth);Ze(U=>U?.left===D.left&&U.top===D.top&&U.placement===D.placement?U:D)},ze=()=>Ye(!0),ce=()=>Ye(!1),Ne=ke?{left:`${ke.left}px`,top:`${ke.top}px`}:void 0;r.useLayoutEffect(()=>{if(!me||!T){Ze(void 0);return}Be()},[me,T]),r.useEffect(()=>{if(!me||!T)return;const m=()=>Be();return window.addEventListener("resize",m),window.addEventListener("scroll",m,!0),()=>{window.removeEventListener("resize",m),window.removeEventListener("scroll",m,!0)}},[me,T]);const ge=m=>{const $=Ie.current,D=Ae.current?.iterator;return!$&&!D?!1:(we.current+=1,Ie.current=void 0,Ae.current=void 0,console.info("[make-ai-assistant] local run cancellation requested",{reason:m}),$?.abort(),St(D),!0)};r.useEffect(()=>()=>{ge("unmount")},[]),r.useEffect(()=>{if(v.enabled)return;const m=y.loadConversation,$=S.current!==a.app.id;if(S.current=a.app.id,ge("reinitialize"),$&&(L(""),w.current=!0),ee(void 0),C(void 0),oe(!1),b(x.createAssistantConversationState()),!m){_e(void 0),je("ready");return}const D=new AbortController;return _e(void 0),je("loading"),console.info("[make-ai-assistant] conversation load start",{appId:a.app.id}),m.call(y,a,{signal:D.signal}).then(U=>{D.signal.aborted||(b(x.createAssistantConversationState(U)),je("ready"),console.info("[make-ai-assistant] conversation load success",{appId:a.app.id,messageCount:U.messages.length}))}).catch(U=>{D.signal.aborted||(console.error("[make-ai-assistant] conversation load failed",{appId:a.app.id,errorType:U instanceof Error?U.name:typeof U}),_e(U),je("error"))}),()=>D.abort()},[a.app.id,te,y,v.enabled]),r.useEffect(()=>{const m=Ee.current;if(!m||!w.current)return;oe(!1);const $=requestAnimationFrame(()=>{if(!w.current)return;const D=k.status==="streaming"||globalThis.matchMedia?.("(prefers-reduced-motion: reduce)").matches?"auto":"smooth";ut(m,D)});return()=>cancelAnimationFrame($)},[k.messages,k.progress,k.status]),r.useEffect(()=>{W||(ne(!1),de(!1))},[W]),r.useEffect(()=>{const m=W&&!I.current;if(I.current=W,!m)return;const $=requestAnimationFrame(()=>{const D=Ee.current;if(D&&w.current){oe(!1);const Ue=P.current.status==="streaming"?"auto":Lt();ut(D,Ue)}else D&&oe(P.current.messages.length>0);const U=Je.current;(U&&!U.disabled?U:A.current??Ge.current?.querySelector("button:not(:disabled)"))?.focus()});return()=>cancelAnimationFrame($)},[W]);const Jt=()=>{const m=Ee.current;if(!m)return;const $=oa(m);w.current=$,oe(!$&&P.current.messages.length>0)},Qt=()=>{const m=Ee.current;if(!m)return;w.current=!0,oe(!1);const $=Lt();ut(m,$)},ft=async(m,$)=>{const D=m.trim(),U=P.current,xe=$?.regenerateFrom,Ue=y.regenerate;if(!D||J!=="ready"||U.status==="streaming"||Ie.current||xe&&!Ue)return;if(x.countCodePointsUpTo(D,x.MAKE_AI_CONVERSATION_LIMITS.messageCharacters)>x.MAKE_AI_CONVERSATION_LIMITS.messageCharacters){ee(`输入内容过长,请控制在 ${x.MAKE_AI_CONVERSATION_LIMITS.messageCharacters} 个字符以内`);return}const tt={id:xe?.userMessage.id??Ms("user"),content:D},st=xe?ia(U,xe.userMessage.id):x.appendUserMessage(U,tt),at=new AbortController,Le=we.current+1;we.current=Le,Ie.current=at,ee(void 0),C(void 0),oe(!w.current&&U.messages.length>0),xe||L(""),b(st);try{let Me=!1,se,xt=0,yt=0,bt=0,ot=0,He=0;const Ke=new Map,jt=new Set,_t=new Set([...st.messages.map(nt=>nt.id),tt.id]),Ve=new Set,kt=Ce.createArtifactCapabilities(O),It={signal:at.signal};let ct;if(xe){if(!Ue)throw new Z("当前 AI 助手不支持重新生成");ct=Ue({threadId:st.threadId,message:tt,assistantMessage:{id:xe.assistantMessage.id,content:xe.assistantMessage.content},context:a,capabilities:kt},It)}else ct=y.run({threadId:st.threadId,message:tt,context:a,capabilities:kt},It);const At=ct[Symbol.asyncIterator]();for(Ae.current={iterator:At,requestVersion:Le};;){const nt=await At.next();if(we.current!==Le||nt.done)break;let M;try{M=x.parseAssistantEvent(nt.value)}catch(le){throw new Z(le instanceof Error?le.message:"Invalid assistant event")}if(M.type==="message.start"){if(se!==void 0&&se!==M.runId)throw new Z("AI 助手响应 run id 不一致");if(se??=M.runId,yt+=1,yt>x.MAKE_AI_CONVERSATION_LIMITS.assistantMessagesPerRun)throw new Z("AI 助手单次响应消息数量超过限制");if(_t.has(M.messageId))throw new Z("AI 助手响应包含重复的 message id");_t.add(M.messageId),Ve.add(M.messageId),Ke.set(M.messageId,0)}if(M.type==="message.delta"){if(!Ve.has(M.messageId))throw new Z("AI 助手响应事件顺序无效");const le=Ke.get(M.messageId)??0,$e=x.countCodePointsUpTo(M.delta,x.MAKE_AI_CONVERSATION_LIMITS.messageCharacters-He);if(He+$e>x.MAKE_AI_CONVERSATION_LIMITS.messageCharacters)throw new Z("AI 助手响应文本超过大小限制");He+=$e,Ke.set(M.messageId,le+$e)}if(M.type==="message.replace"){if(!Ve.has(M.messageId))throw new Z("AI 助手响应事件顺序无效");const le=Ke.get(M.messageId)??0,$e=x.countCodePointsUpTo(M.content,x.MAKE_AI_CONVERSATION_LIMITS.messageCharacters),wt=He-le+$e;if(wt>x.MAKE_AI_CONVERSATION_LIMITS.messageCharacters)throw new Z("AI 助手响应文本超过大小限制");He=wt,Ke.set(M.messageId,$e)}if(M.type==="run.progress"){if(se!==void 0&&se!==M.runId)throw new Z("AI 助手响应 run id 不一致");if(se??=M.runId,bt+=1,bt>x.MAKE_AI_CONVERSATION_LIMITS.progressStepsPerRun)throw new Z("AI 助手处理过程数量超过限制");const le=x.countCodePointsUpTo(M.message,x.MAKE_AI_CONVERSATION_LIMITS.progressCharactersPerRun-ot);if(ot+le>x.MAKE_AI_CONVERSATION_LIMITS.progressCharactersPerRun)throw new Z("AI 助手处理过程文本超过大小限制");ot+=le}if(M.type==="artifact"){if(!Ve.has(M.messageId))throw new Z("AI 助手响应事件顺序无效");if(xt+=1,xt>x.MAKE_AI_CONVERSATION_LIMITS.artifactsPerRun)throw new Z("AI 助手单次响应 Artifact 数量超过限制");if(jt.has(M.artifact.id))throw new Z("AI 助手响应包含重复的 Artifact id");jt.add(M.artifact.id)}if(M.type==="message.complete"&&!Ve.delete(M.messageId))throw new Z("AI 助手响应事件顺序无效");if(M.type==="run.complete"&&se!==void 0&&se!==M.runId)throw new Z("AI 助手响应 run id 不一致");if(M.type==="run.cancelled"&&M.runId!==void 0&&se!==void 0&&se!==M.runId)throw new Z("AI 助手响应 run id 不一致");if(b(le=>x.reduceAssistantEvent(le,M)),M.type==="error"||M.type==="run.cancelled"||M.type==="run.complete"){Me=!0;break}}if(!Me)throw new Z("AI 助手流式响应在终止事件前结束")}catch(Me){if(we.current!==Le)return;if(at.signal.aborted){b(se=>x.reduceAssistantEvent(se,{type:"run.cancelled"}));return}console.error("[make-ai-assistant] assistant run failed",{appId:a.app.id,errorType:Me instanceof Error?Me.name:typeof Me}),b(se=>x.reduceAssistantEvent(se,{type:"error",code:"TRANSPORT_ERROR",message:Me instanceof Z?Me.message:"连接失败,请重试",retryable:!0}))}finally{we.current===Le&&Ie.current===at&&(Ie.current=void 0),Ae.current?.requestVersion===Le&&(St(Ae.current.iterator),Ae.current=void 0)}},Qe=m=>{if(v.enabled){if(u.pending)return ee("请等待附件上传完成,或移除失败的附件"),Promise.resolve();if(u.parts.some(U=>!y.features?.modelInputKinds?.includes(U.kind)))return ee("当前模型尚未开放此类附件理解,已上传原件可保留或移除"),Promise.resolve();const $=m.trim(),D=u.parts.length?[...$?[{id:Oe(),kind:"text",text:$}]:[],...u.parts]:void 0;return L(""),u.clear(),v.send($,D)}return ft(m)},es=m=>ft(m.userMessage.content,{regenerateFrom:m}),ts=async(m,$)=>{try{await Us($),C({messageId:m,message:"已复制",status:"success"})}catch(D){console.error("[make-ai-assistant] copy answer failed",{errorType:D instanceof Error?D.name:typeof D}),C({messageId:m,message:"复制失败",status:"error"})}},ss=m=>{m.preventDefault(),Qe(K)},as=m=>{m.key==="Enter"&&!m.shiftKey&&!m.nativeEvent.isComposing&&(m.preventDefault(),Qe(K))},ns=()=>{if(v.enabled){v.stop();return}ge("stop")&&b(m=>x.reduceAssistantEvent(m,{type:"run.cancelled"}))},pt=()=>{if(de(!1),v.enabled){L(""),v.create(),d?.();return}ge("new-conversation"),L(""),ee(void 0),C(void 0),oe(!1),w.current=!0,b(x.createAssistantConversationState()),d?.()},vt=v.enabled&&v.cancelling.length?"停止中":y.features?.remoteCancellation===!1?"停止接收":"停止生成",rs=qt(k),is=Xt(k),et=ra(k),os=typeof y.regenerate=="function"&&y.features?.regeneration!==!1,gt=()=>{if(v.enabled){v.retry();return}et&&Qe(et.content)},cs=m=>{if(m.key==="Escape"&&!(!q&&!re)){if(m.preventDefault(),m.stopPropagation(),q){ne(!1),Te.current?.focus();return}de(!1),i.current?.focus()}};return e.jsxs("section",{className:`make-ai-assistant make-ai-assistant__panel${v.enabled?" make-ai-assistant__panel--managed":""}`,ref:Ge,style:G,onKeyDown:cs,onDragOver:m=>{u.enabled&&m.dataTransfer.types.includes("Files")&&m.preventDefault()},onDrop:m=>{u.enabled&&m.dataTransfer.files.length&&(m.preventDefault(),u.add(Array.from(m.dataTransfer.files)))},children:[e.jsxs("header",{className:"make-ai-assistant__header",children:[e.jsx("div",{className:"make-ai-assistant__header-leading",children:v.enabled?e.jsxs("button",{"aria-controls":F,"aria-expanded":re,"aria-haspopup":"dialog","aria-label":"任务列表",className:"make-ai-assistant__task-list-trigger",ref:i,type:"button",onClick:()=>de(m=>!m),children:[e.jsx(Ys,{}),e.jsx("span",{children:"任务列表"}),e.jsx(Zs,{})]}):null}),e.jsxs("div",{className:"make-ai-assistant__header-center",children:[e.jsx(it,{}),e.jsxs("div",{className:"make-ai-assistant__header-content",children:[e.jsxs("div",{className:"make-ai-assistant__header-title-row",children:[e.jsx("h2",{className:"make-ai-assistant__header-title",title:l,children:l}),v.enabled?e.jsx("span",{className:"make-ai-assistant__current-conversation",children:v.chat?.title||"新对话"}):null,e.jsx("span",{className:"make-ai-assistant__read-only-tag",children:"只读"})]}),e.jsxs("div",{className:"make-ai-assistant__header-context",children:[e.jsx("p",{title:N,children:N}),T?e.jsxs(e.Fragment,{children:[e.jsx("span",{"aria-describedby":z,"aria-label":`使用提示:${T}`,className:"make-ai-assistant__header-context-help","data-tooltip":T,ref:h,role:"note",tabIndex:0,onBlur:ce,onFocus:ze,onPointerEnter:ze,onPointerLeave:ce,children:e.jsx(Ws,{})}),e.jsx("span",{"aria-hidden":!me,className:"make-ai-assistant__header-context-tooltip","data-placement":ke?.placement,"data-positioned":ke?!0:void 0,"data-visible":me||void 0,id:z,ref:_,role:"tooltip",style:Ne,children:T})]}):null]})]})]}),e.jsxs("div",{className:"make-ai-assistant__header-actions",children:[y.features?.newConversation!==!1?e.jsx("button",{"aria-label":"新建对话",className:"make-ai-assistant__icon-button",type:"button",onClick:pt,children:e.jsx(Xs,{})}):null,c?e.jsx("button",{"aria-label":`关闭 ${l}`,className:"make-ai-assistant__icon-button",type:"button",onClick:c,children:e.jsx(Hs,{})}):null]})]}),v.enabled&&re?e.jsx(bs,{id:F,manager:v,triggerRef:i,onDismiss:()=>de(!1),onNewConversation:y.features?.newConversation!==!1?pt:void 0}):null,e.jsxs("div",{className:"make-ai-assistant__body","aria-live":"polite","aria-relevant":"additions text",ref:Ee,role:"log",onScroll:Jt,children:[J==="loading"?e.jsxs("div",{className:"make-ai-assistant__empty",role:"status",children:[e.jsx(it,{}),e.jsx("h3",{children:"正在恢复对话"}),e.jsx("p",{children:"正在读取当前 App 的历史消息…"})]}):J==="error"?e.jsx("div",{className:"make-ai-assistant__empty",children:e.jsx(ca,{error:ve,onRetry:()=>ie(m=>m+1)})}):k.messages.length===0?e.jsxs("div",{className:"make-ai-assistant__empty",children:[e.jsx(it,{}),e.jsx("h3",{children:"有什么可以帮你?"}),e.jsx("p",{children:"我会结合当前 App、页面位置和宿主允许的上下文回答,并把过程与结果分开展示。"})]}):da(k,a,O,H,o,n,t,et?gt:void 0,Q,V,Se,os,(m,$)=>{ts(m,$)},m=>{es(m)},v.enabled?v:void 0,y),k.progress&&!rs?e.jsx($t,{assistantName:t,progress:k.progress}):null,k.error&&!is?e.jsx($t,{assistantName:t,error:k.error,onRetry:et?gt:void 0}):null]}),Xe?e.jsx("button",{"aria-label":"回到最新消息",className:"make-ai-assistant__back-to-latest",type:"button",onClick:Qt,children:e.jsx(qs,{})}):null,e.jsxs("footer",{className:"make-ai-assistant__composer-region",children:[u.enabled?e.jsx(Ts,{attachments:u}):null,J==="ready"&&he.length>0&&k.messages.length===0?e.jsx("div",{className:"make-ai-assistant__suggestions","aria-label":"推荐问题",children:he.map((m,$)=>e.jsx("button",{type:"button",onClick:()=>{Qe(m)},children:m},`${$}-${m}`))}):null,e.jsxs("form",{className:"make-ai-assistant__composer",onSubmit:ss,children:[e.jsx("textarea",{"aria-label":`向 ${t} 提问`,"aria-describedby":Y?"make-ai-composer-error":void 0,"aria-invalid":Y?!0:void 0,autoFocus:!0,disabled:J!=="ready"||!v.enabled&&k.status==="streaming",placeholder:`询问当前 ${a.app.name??"App"} 中的数据…`,ref:Je,rows:2,value:K,onChange:m=>{L(m.currentTarget.value),ee(void 0)},onKeyDown:as,onPaste:m=>{u.enabled&&m.clipboardData.files.length&&(m.preventDefault(),u.add(Array.from(m.clipboardData.files)))}}),u.enabled?e.jsx(ws,{attachments:u,open:q,triggerRef:Te,onOpenChange:ne}):null,e.jsxs("div",{className:"make-ai-assistant__composer-actions",children:[k.status==="streaming"?e.jsx("button",{"aria-label":vt,className:"make-ai-assistant__send make-ai-assistant__send--stop","data-tooltip":vt,ref:A,disabled:v.enabled&&v.cancelling.includes(k.activeRunId??""),type:"button",onClick:ns,children:e.jsx("span",{"aria-hidden":"true"})}):e.jsx("button",{"aria-label":"发送",className:"make-ai-assistant__send",disabled:J!=="ready"||u.pending||!K.trim()&&!u.parts.length,type:"submit",children:e.jsx(Et,{})}),v.enabled&&k.status==="streaming"?e.jsx("button",{"aria-label":"发送",className:"make-ai-assistant__send",disabled:v.busy||u.pending||!K.trim()&&!u.parts.length,type:"submit",children:e.jsx(Et,{})}):null]})]}),Y?e.jsx("p",{id:"make-ai-composer-error",role:"alert",children:Y}):null,e.jsx("p",{children:"AI 生成的结果可能存在偏差,重要数据请核对明细。"})]})]})}function ua(t){return e.jsx(Gt,{...t,visible:!0})}function ma({defaultOpen:t=!1,hideLauncher:s=!1,launcher:a,launcherPosition:o="bottom-right",maxDrawerWidth:n,onOpenChange:c,open:d,...g}){const p=Ut(g.brandName,g.title),[f,j]=r.useState(t),[E,B]=r.useState(()=>t||d===!0),H=r.useRef(null),y=r.useRef(null),V=r.useRef(void 0),[Q,W]=r.useState(),[v,u]=r.useState(Ls),[l,T]=r.useState(!1),N=d??f,ae=mt(g.theme),R=Ds(n),G=()=>Os(v,R,typeof window>"u"?Ht:window.innerWidth),K=G(),L=Q===void 0?void 0:lt(Q,v,K),q=L===void 0&&R===void 0?void 0:{...L===void 0?{}:{"--make-ai-internal-drawer-width":`${L}px`},...R===void 0?{}:{"--make-ai-internal-drawer-max-width":`max(var(--make-ai-internal-drawer-min-width), ${R}px)`}};r.useLayoutEffect(()=>{L!==void 0&&L!==Q&&W(L)},[L,Q]);const ne=()=>{if(L!==void 0)return L;const b=y.current?.getBoundingClientRect().width;return b&&Number.isFinite(b)&&b>0?b:v},re=b=>{if(b.button!==0)return;const P=ne(),Y=Q===void 0?P:v;u(Y),V.current={minimumWidth:Y,pointerId:b.pointerId,startWidth:P,startX:b.clientX},T(!0),typeof b.currentTarget.setPointerCapture=="function"&&b.currentTarget.setPointerCapture(b.pointerId),b.preventDefault()},de=b=>{const P=V.current;if(!P||P.pointerId!==b.pointerId)return;const Y=lt(P.startWidth+P.startX-b.clientX,P.minimumWidth,G());W(Y)},ye=b=>{const P=V.current;!P||P.pointerId!==b.pointerId||(V.current=void 0,T(!1))},be=b=>{const P=b.key==="ArrowLeft"?Rt:b.key==="ArrowRight"?-Rt:void 0;if(P===void 0)return;b.preventDefault();const Y=ne(),ee=Q===void 0?Y:v;u(ee),W(lt(Y+P,ee,G()))},X=b=>{d===void 0&&j(b),c?.(b),b||requestAnimationFrame(()=>H.current?.focus())},k=()=>X(!N);return r.useEffect(()=>{N&&B(!0)},[N]),r.useEffect(()=>{if(!N)return;const b=P=>{P.key==="Escape"&&(X(!1),requestAnimationFrame(()=>H.current?.focus()))};return document.addEventListener("keydown",b),()=>document.removeEventListener("keydown",b)},[c,N]),e.jsxs("div",{className:"make-ai-assistant","data-open":N||void 0,style:ae,children:[!s&&(!N||a)?a?a({open:N,toggle:k}):e.jsxs("button",{"aria-label":N?`关闭 ${p}`:`打开 ${p}`,"aria-expanded":N,className:"make-ai-assistant__launcher","data-launcher-position":o,ref:H,type:"button",onClick:k,children:[e.jsx("span",{className:"make-ai-assistant__launcher-orbit","aria-hidden":"true"}),e.jsx(Kt,{})]}):null,E?e.jsxs("aside",{"aria-label":p,"aria-modal":"false",className:"make-ai-assistant__drawer","data-resizing":l||void 0,hidden:!N,ref:y,role:"dialog",style:q,children:[e.jsx("div",{"aria-label":"调整对话框宽度","aria-orientation":"vertical","aria-valuemax":K,"aria-valuemin":v,"aria-valuenow":L??v,className:"make-ai-assistant__drawer-resize-handle",role:"separator",tabIndex:0,onKeyDown:be,onPointerCancel:ye,onPointerDown:re,onPointerMove:de,onPointerUp:ye}),e.jsx(Gt,{...g,onClose:()=>X(!1),visible:N})]}):null]})}exports.createArtifactCapabilities=Ce.createArtifactCapabilities;exports.createArtifactTemplateRegistry=Ce.createArtifactTemplateRegistry;exports.extendArtifactTemplateRegistry=Ce.extendArtifactTemplateRegistry;exports.resolveArtifactTemplate=Ce.resolveArtifactTemplate;exports.MAKE_AI_ARTIFACT_KINDS=x.MAKE_AI_ARTIFACT_KINDS;exports.MAKE_AI_ARTIFACT_LIMITS=x.MAKE_AI_ARTIFACT_LIMITS;exports.MAKE_AI_ARTIFACT_SCHEMA_VERSION=x.MAKE_AI_ARTIFACT_SCHEMA_VERSION;exports.MAKE_AI_CONVERSATION_LIMITS=x.MAKE_AI_CONVERSATION_LIMITS;exports.appendUserMessage=x.appendUserMessage;exports.createAssistantConversationState=x.createAssistantConversationState;exports.parseArtifact=x.parseArtifact;exports.parseAssistantEvent=x.parseAssistantEvent;exports.reduceAssistantEvent=x.reduceAssistantEvent;exports.validateArtifact=x.validateArtifact;exports.ArtifactRenderer=Ot;exports.AssistantPanel=ua;exports.MakeAiAssistant=ma;exports.createPlatformArtifactRegistry=zt;exports.formatArtifactValue=Re;exports.platformArtifactTemplates=Bt;
3
+ `),d=()=>{const h=a.join(`
4
+ `).trim();a.length=0,h&&s.push({type:"paragraph",text:h})},f=()=>{o.length&&s.push({type:"list",items:o.splice(0)})},g=()=>{const h=r.join(`
5
+ `).trim();r.length=0,h&&s.push({type:"pre",text:h})};for(let h=0;h<c.length;h+=1){const _=c[h]??"",$=_.trim();if(!$){d(),f(),g();continue}const A=$s(c,h);if(A){d(),f(),g(),s.push({headers:A.headers,rows:A.rows,type:"table"}),h=A.lastIndex;continue}const H=/^(#{1,6})\s+(.+)$/.exec($);if(H){d(),f(),g();const O=(H[2]??"").replace(/\s+#+\s*$/,"").trim();O&&s.push({type:"heading",level:H[1]?.length,text:O});continue}if(/^\s*\|.+\|\s*$/.test(_)){d(),f(),r.push(_.trim());continue}const M=/^\s*[-*]\s+(.+)$/.exec(_);if(M){d(),g(),o.push(M[1]?.trim()??"");continue}f(),g(),a.push($)}return d(),f(),g(),s},Ue=e=>{const s=[],a=/(\*\*[^*]+\*\*|`[^`]+`)/g;let o=0;for(const r of e.matchAll(a)){const c=r[0],d=r.index??0;d>o&&s.push(e.slice(o,d)),c.startsWith("**")?s.push(t.jsx("strong",{children:c.slice(2,-2)},`${d}-strong`)):s.push(t.jsx("code",{children:c.slice(1,-1)},`${d}-code`)),o=d+c.length}return o<e.length&&s.push(e.slice(o)),s},At=({content:e})=>{const s=Ds(e);return s.length?t.jsx("div",{className:"make-ai-assistant__bubble make-ai-assistant__assistant-text",children:s.map((a,o)=>{if(a.type==="heading"){const r=a.level<=2?"h3":"h4";return t.jsx(r,{className:`make-ai-assistant__markdown-heading make-ai-assistant__markdown-heading--${a.level}`,children:Ue(a.text)},`${o}-heading`)}return a.type==="paragraph"?t.jsx("p",{children:Ue(a.text)},`${o}-paragraph`):a.type==="pre"?t.jsx("pre",{children:t.jsx("code",{children:a.text})},`${o}-pre`):a.type==="table"?t.jsx("div",{"aria-label":"表格内容,可横向滚动",className:"make-ai-assistant__markdown-table-scroll",role:"region",tabIndex:0,children:t.jsxs("table",{className:"make-ai-assistant__markdown-table",children:[t.jsx("thead",{children:t.jsx("tr",{children:a.headers.map((r,c)=>t.jsx("th",{scope:"col",children:Ue(r)},`${c}-${r}`))})}),t.jsx("tbody",{children:a.rows.map((r,c)=>t.jsx("tr",{children:r.map((d,f)=>t.jsx("td",{children:Ue(d)},`${f}-${d}`))},`${c}-${r.join("|")}`))})]})},`${o}-table`):t.jsx("ul",{children:a.items.map((r,c)=>t.jsx("li",{children:Ue(r)},`${c}-${r}`))},`${o}-list`)})}):null},Ft=({assistantName:e})=>t.jsxs("div",{className:"make-ai-assistant__message-identity",children:[t.jsx(st,{className:"make-ai-assistant__avatar--message"}),t.jsx("span",{className:"make-ai-assistant__message-sender",children:e})]}),Pt=e=>{for(let s=e.messages.length-1;s>=0;s-=1){const a=e.messages[s];if(a.role==="assistant"&&a.status==="streaming")return a.id}},Os=e=>{for(let s=e.messages.length-1;s>=0;s-=1)if(e.messages[s].role==="user")return s;return-1},Bt=e=>{const s=Os(e);if(!(s<0))for(let a=e.messages.length-1;a>s;a-=1){const o=e.messages[a];if(o.role==="assistant")return o.id}},Fs=e=>{if(e.status==="idle")for(let s=e.messages.length-1;s>=0;s-=1){const a=e.messages[s];if(a.role==="assistant"&&a.status==="complete")return a.id}},Ps=e=>{for(let s=e.messages.length-1;s>=0;s-=1){const a=e.messages[s];if(a.role==="user")return a}},Bs=(e,s)=>{const a=e.messages.findIndex(o=>o.id===s&&o.role==="user");return{...e,error:void 0,progress:void 0,status:"streaming",messages:a<0?e.messages:e.messages.slice(0,a+1)}},zs=e=>e.scrollHeight-e.scrollTop-e.clientHeight<=48,wt=(e="smooth")=>globalThis.matchMedia?.("(prefers-reduced-motion: reduce)").matches?"auto":e,ot=(e,s)=>{typeof e.scrollTo=="function"?e.scrollTo({top:e.scrollHeight,behavior:s}):e.scrollTop=e.scrollHeight},zt=({error:e,onRetry:s})=>t.jsxs("div",{className:"make-ai-assistant__message-status make-ai-assistant__message-status--error","data-error-presentation":"request-failed",role:"alert",children:[t.jsxs("div",{className:"make-ai-assistant__message-status-header",children:[t.jsx("span",{className:"make-ai-assistant__message-status-icon","aria-hidden":"true",children:t.jsx(Es,{})}),t.jsx("strong",{children:"请求未完成"})]}),t.jsx("span",{className:"make-ai-assistant__message-status-message",children:e.message}),e.retryable&&s?t.jsxs("button",{className:"make-ai-assistant__retry",type:"button",onClick:s,children:[t.jsx(Ot,{}),"重新发送"]}):null]}),Ks=({error:e,onRetry:s})=>{const a=_s(e);return t.jsxs("section",{"aria-live":"assertive",className:"make-ai-assistant__load-failure","data-load-failure-kind":a.kind,role:"alert",children:[t.jsx("span",{className:"make-ai-assistant__load-failure-icon","aria-hidden":"true",children:t.jsxs("svg",{viewBox:"0 0 24 24",children:[t.jsx("path",{d:"M5 12a7 7 0 0 1 13.4-2.8A4.5 4.5 0 0 1 18 18H7.5A4.5 4.5 0 0 1 5 12Z"}),t.jsx("path",{d:"m9.2 14.8 5.6-5.6M9.2 9.2l5.6 5.6"})]})}),t.jsxs("div",{className:"make-ai-assistant__load-failure-copy",children:[t.jsx("span",{className:"make-ai-assistant__load-failure-label",children:a.label}),t.jsx("h3",{children:a.title}),t.jsx("p",{children:a.description})]}),t.jsxs("button",{className:"make-ai-assistant__retry make-ai-assistant__retry--primary",type:"button",onClick:s,children:[t.jsx(Ot,{}),a.actionLabel]})]})},Kt=({active:e,steps:s})=>{if(!e||!s?.length)return null;const a=s[s.length-1]??"处理中";return t.jsxs("details",{className:"make-ai-assistant__process",open:!0,children:[t.jsxs("summary",{children:[t.jsxs("span",{className:"make-ai-assistant__progress",role:"status",children:[t.jsx("span",{"aria-hidden":"true"}),t.jsx("span",{children:a})]}),t.jsxs("span",{className:"make-ai-assistant__process-count",children:[s.length," 步"]})]}),t.jsx("ol",{children:s.map((o,r)=>t.jsxs("li",{"data-step-active":r===s.length-1?!0:void 0,children:[t.jsx("span",{"aria-hidden":"true"}),t.jsx("span",{children:o})]},`${r}-${o}`))})]})},Us=({copyFeedback:e,onCopy:s,onRegenerate:a})=>!s&&!a?null:t.jsxs("div",{className:"make-ai-assistant__reply-actions","aria-label":"回复操作",children:[s?t.jsx("button",{"aria-label":"复制回答",className:"make-ai-assistant__reply-action make-ai-assistant__reply-copy","data-tooltip":"复制",type:"button",onClick:s,children:t.jsx(As,{})}):null,a?t.jsx("button",{"aria-label":"重新生成",className:"make-ai-assistant__reply-action make-ai-assistant__reply-regenerate","data-tooltip":"重新生成",type:"button",onClick:a,children:t.jsx(ws,{})}):null,e?t.jsx("span",{className:"make-ai-assistant__reply-feedback","data-copy-status":e.status,role:"status",children:e.message}):null]}),Mt=({assistantName:e,error:s,onRetry:a,progress:o})=>{const r=s?"error":"progress";return s?.message??o?.message?t.jsx("article",{"aria-label":`${e}的${r==="error"?"错误消息":"状态消息"}`,className:`make-ai-assistant__message make-ai-assistant__message--assistant make-ai-assistant__message--${r}`,"data-message-role":"assistant","data-message-state":r,children:t.jsxs("div",{className:"make-ai-assistant__message-turn",children:[t.jsx(Ft,{assistantName:e}),t.jsx("div",{className:"make-ai-assistant__message-stack",children:s?t.jsx(zt,{error:s,onRetry:a}):t.jsx(Kt,{active:!0,steps:o?.steps})})]})}):null},Ws=(e,s,a,o,r,c,d,f,g,h,_,$,A,H,M,O)=>{const y=Bt(e),N=Pt(e),B=Fs(e);let p;return e.messages.map(l=>{if(l.intermediate)return t.jsxs("details",{className:"make-ai-assistant__process",children:[t.jsx("summary",{children:"处理过程"}),t.jsx(At,{content:l.content})]},l.id);const C=l.role==="assistant",R=p;C||(p=l);const ee=l.id===N,S=l.id===y?e.error:void 0,X=l.error??S,Z=!C&&!!(g?.trim()||h),D=C?d:g?.trim()||"用户",J=C&&l.status==="complete"&&!X&&(l.content.trim()||l.id===B);return t.jsx("article",{"aria-label":`${D}的消息`,className:`make-ai-assistant__message make-ai-assistant__message--${l.role}`,"data-message-role":l.role,"data-message-state":X?"error":void 0,"data-message-status":l.status,"data-message-has-identity":C||Z?!0:void 0,children:t.jsxs("div",{className:"make-ai-assistant__message-turn",children:[C?t.jsx(Ft,{assistantName:d}):Z?t.jsx(Ns,{userAvatarUrl:h,userName:g}):null,t.jsxs("div",{className:"make-ai-assistant__message-stack",children:[C&&l.responseId&&e.responses?.[l.responseId]?.status==="cancelled"?t.jsx("p",{className:"make-ai-assistant__response-status",role:"status",children:"已停止生成"}):null,l.content?C?t.jsx(At,{content:l.content}):t.jsx("div",{className:"make-ai-assistant__bubble",children:l.content}):l.status==="streaming"?t.jsxs("div",{className:"make-ai-assistant__typing","aria-label":`${d}正在思考`,children:[t.jsx("span",{}),t.jsx("span",{}),t.jsx("span",{})]}):null,C?t.jsx(Kt,{active:ee&&e.status==="streaming",steps:l.progressSteps}):null,X?t.jsx(zt,{error:X,onRetry:S?f:void 0}):null,l.artifacts.map(ue=>t.jsx(St,{artifact:ue,context:s,onAction:r,onActionError:c,registry:a,theme:o},ue.id)),M&&O&&e.threadId?t.jsx(rs,{message:l,context:s,transport:O,chatId:e.threadId}):null,M&&O?.features?.feedback?t.jsx(as,{message:l,manager:M}):null,J?t.jsx(Us,{copyFeedback:_?.messageId===l.id?{message:_.message,status:_.status}:void 0,onCopy:l.content.trim()?()=>A(l.id,l.content):void 0,onRegenerate:$&&l.id===B&&R?()=>H({userMessage:R,assistantMessage:l}):void 0}):null]})]})},`${e.threadId??"local"}:${l.id}`)})};function Ut({assistantName:e="AI 助手",brandName:s,context:a,onAction:o,onActionError:r,onClose:c,onNewConversation:d,headerHeight:f,registry:g,suggestions:h,title:_,theme:$,transport:A,userAvatarUrl:H,userName:M,visible:O}){const y=Qt(a,A),N=ls(a,A,y),B=Lt(s,_),p=bs(f),l=ct($),C=l||p?{...l,...p?{"--make-ai-internal-header-height":p}:{}}:void 0,[R,ee]=i.useState(""),[S,X]=i.useState(!1),[Z,D]=i.useState(!1),J=y.enabled?A.scopeKey?.(a)??a.app.id:"";i.useLayoutEffect(()=>{y.enabled&&ee("")},[J,y.enabled]);const[ue,me]=i.useState(v.createAssistantConversationState),F=y.enabled?y.state:ue,ae=y.enabled?y.setState:me,ie=i.useRef(F);ie.current=F;const[W,L]=i.useState(void 0),[k,z]=i.useState(void 0),[te,he]=i.useState(0),[we,E]=i.useState(()=>A.loadConversation?"loading":"ready"),Q=y.enabled?y.loading&&!F.messages.length?"loading":"ready":we,[oe,ce]=i.useState(void 0),[Le,G]=i.useState(!1),ne=i.useRef(void 0),le=i.useRef(void 0),ye=i.useRef(0),$e=i.useRef(null),xe=i.useRef(null),We=i.useRef(null),De=i.useRef(null),Oe=i.useRef(null),Ve=i.useRef(null),fe=i.useRef(!0),qe=i.useRef(a.app.id),He=i.useRef(O),Xe=i.useId(),Ze=i.useMemo(()=>g??Nt(),[g]),_e=i.useMemo(()=>ps(h),[h]),n=u=>{const U=ne.current,q=le.current?.iterator;return!U&&!q?!1:(ye.current+=1,ne.current=void 0,le.current=void 0,console.info("[make-ai-assistant] local run cancellation requested",{reason:u}),U?.abort(),kt(q),!0)};i.useEffect(()=>()=>{n("unmount")},[]),i.useEffect(()=>{if(y.enabled)return;const u=A.loadConversation,U=qe.current!==a.app.id;if(qe.current=a.app.id,n("reinitialize"),U&&(ee(""),fe.current=!0),L(void 0),z(void 0),G(!1),ae(v.createAssistantConversationState()),!u){ce(void 0),E("ready");return}const q=new AbortController;return ce(void 0),E("loading"),console.info("[make-ai-assistant] conversation load start",{appId:a.app.id}),u.call(A,a,{signal:q.signal}).then(se=>{q.signal.aborted||(ae(v.createAssistantConversationState(se)),E("ready"),console.info("[make-ai-assistant] conversation load success",{appId:a.app.id,messageCount:se.messages.length}))}).catch(se=>{q.signal.aborted||(console.error("[make-ai-assistant] conversation load failed",{appId:a.app.id,errorType:se instanceof Error?se.name:typeof se}),ce(se),E("error"))}),()=>q.abort()},[a.app.id,te,A,y.enabled]),i.useEffect(()=>{const u=xe.current;if(!u||!fe.current)return;G(!1);const U=requestAnimationFrame(()=>{if(!fe.current)return;const q=F.status==="streaming"||globalThis.matchMedia?.("(prefers-reduced-motion: reduce)").matches?"auto":"smooth";ot(u,q)});return()=>cancelAnimationFrame(U)},[F.messages,F.progress,F.status]),i.useEffect(()=>{O||(X(!1),D(!1))},[O]),i.useEffect(()=>{const u=O&&!He.current;if(He.current=O,!u)return;const U=requestAnimationFrame(()=>{const q=xe.current;if(q&&fe.current){G(!1);const Pe=ie.current.status==="streaming"?"auto":wt();ot(q,Pe)}else q&&G(ie.current.messages.length>0);const se=We.current;(se&&!se.disabled?se:Ve.current??$e.current?.querySelector("button:not(:disabled)"))?.focus()});return()=>cancelAnimationFrame(U)},[O]);const m=()=>{const u=xe.current;if(!u)return;const U=zs(u);fe.current=U,G(!U&&ie.current.messages.length>0)},x=()=>{const u=xe.current;if(!u)return;fe.current=!0,G(!1);const U=wt();ot(u,U)},b=async(u,U)=>{const q=u.trim(),se=ie.current,je=U?.regenerateFrom,Pe=A.regenerate;if(!q||Q!=="ready"||se.status==="streaming"||ne.current||je&&!Pe)return;if(v.countCodePointsUpTo(q,v.MAKE_AI_CONVERSATION_LIMITS.messageCharacters)>v.MAKE_AI_CONVERSATION_LIMITS.messageCharacters){L(`输入内容过长,请控制在 ${v.MAKE_AI_CONVERSATION_LIMITS.messageCharacters} 个字符以内`);return}const Ye={id:je?.userMessage.id??ms("user"),content:q},Je=je?Bs(se,je.userMessage.id):v.appendUserMessage(se,Ye),Qe=new AbortController,Re=ye.current+1;ye.current=Re,ne.current=Qe,L(void 0),z(void 0),G(!fe.current&&se.messages.length>0),je||ee(""),ae(Je);try{let ke=!1,re,ut=0,mt=0,ht=0,at=0,Be=0;const ze=new Map,ft=new Set,pt=new Set([...Je.messages.map(et=>et.id),Ye.id]),Ke=new Set,vt=Ae.createArtifactCapabilities(Ze),gt={signal:Qe.signal};let nt;if(je){if(!Pe)throw new Y("当前 AI 助手不支持重新生成");nt=Pe({threadId:Je.threadId,message:Ye,assistantMessage:{id:je.assistantMessage.id,content:je.assistantMessage.content},context:a,capabilities:vt},gt)}else nt=A.run({threadId:Je.threadId,message:Ye,context:a,capabilities:vt},gt);const yt=nt[Symbol.asyncIterator]();for(le.current={iterator:yt,requestVersion:Re};;){const et=await yt.next();if(ye.current!==Re||et.done)break;let w;try{w=v.parseAssistantEvent(et.value)}catch(de){throw new Y(de instanceof Error?de.message:"Invalid assistant event")}if(w.type==="message.start"){if(re!==void 0&&re!==w.runId)throw new Y("AI 助手响应 run id 不一致");if(re??=w.runId,mt+=1,mt>v.MAKE_AI_CONVERSATION_LIMITS.assistantMessagesPerRun)throw new Y("AI 助手单次响应消息数量超过限制");if(pt.has(w.messageId))throw new Y("AI 助手响应包含重复的 message id");pt.add(w.messageId),Ke.add(w.messageId),ze.set(w.messageId,0)}if(w.type==="message.delta"){if(!Ke.has(w.messageId))throw new Y("AI 助手响应事件顺序无效");const de=ze.get(w.messageId)??0,Se=v.countCodePointsUpTo(w.delta,v.MAKE_AI_CONVERSATION_LIMITS.messageCharacters-Be);if(Be+Se>v.MAKE_AI_CONVERSATION_LIMITS.messageCharacters)throw new Y("AI 助手响应文本超过大小限制");Be+=Se,ze.set(w.messageId,de+Se)}if(w.type==="message.replace"){if(!Ke.has(w.messageId))throw new Y("AI 助手响应事件顺序无效");const de=ze.get(w.messageId)??0,Se=v.countCodePointsUpTo(w.content,v.MAKE_AI_CONVERSATION_LIMITS.messageCharacters),xt=Be-de+Se;if(xt>v.MAKE_AI_CONVERSATION_LIMITS.messageCharacters)throw new Y("AI 助手响应文本超过大小限制");Be=xt,ze.set(w.messageId,Se)}if(w.type==="run.progress"){if(re!==void 0&&re!==w.runId)throw new Y("AI 助手响应 run id 不一致");if(re??=w.runId,ht+=1,ht>v.MAKE_AI_CONVERSATION_LIMITS.progressStepsPerRun)throw new Y("AI 助手处理过程数量超过限制");const de=v.countCodePointsUpTo(w.message,v.MAKE_AI_CONVERSATION_LIMITS.progressCharactersPerRun-at);if(at+de>v.MAKE_AI_CONVERSATION_LIMITS.progressCharactersPerRun)throw new Y("AI 助手处理过程文本超过大小限制");at+=de}if(w.type==="artifact"){if(!Ke.has(w.messageId))throw new Y("AI 助手响应事件顺序无效");if(ut+=1,ut>v.MAKE_AI_CONVERSATION_LIMITS.artifactsPerRun)throw new Y("AI 助手单次响应 Artifact 数量超过限制");if(ft.has(w.artifact.id))throw new Y("AI 助手响应包含重复的 Artifact id");ft.add(w.artifact.id)}if(w.type==="message.complete"&&!Ke.delete(w.messageId))throw new Y("AI 助手响应事件顺序无效");if(w.type==="run.complete"&&re!==void 0&&re!==w.runId)throw new Y("AI 助手响应 run id 不一致");if(w.type==="run.cancelled"&&w.runId!==void 0&&re!==void 0&&re!==w.runId)throw new Y("AI 助手响应 run id 不一致");if(ae(de=>v.reduceAssistantEvent(de,w)),w.type==="error"||w.type==="run.cancelled"||w.type==="run.complete"){ke=!0;break}}if(!ke)throw new Y("AI 助手流式响应在终止事件前结束")}catch(ke){if(ye.current!==Re)return;if(Qe.signal.aborted){ae(re=>v.reduceAssistantEvent(re,{type:"run.cancelled"}));return}console.error("[make-ai-assistant] assistant run failed",{appId:a.app.id,errorType:ke instanceof Error?ke.name:typeof ke}),ae(re=>v.reduceAssistantEvent(re,{type:"error",code:"TRANSPORT_ERROR",message:ke instanceof Y?ke.message:"连接失败,请重试",retryable:!0}))}finally{ye.current===Re&&ne.current===Qe&&(ne.current=void 0),le.current?.requestVersion===Re&&(kt(le.current.iterator),le.current=void 0)}},I=u=>{if(y.enabled){if(N.pending)return L("请等待附件上传完成,或移除失败的附件"),Promise.resolve();const U=u.trim(),q=N.parts.length?[...U?[{id:Ee(),kind:"text",text:U}]:[],...N.parts]:void 0;return ee(""),N.clear(),y.send(U,q)}return b(u)},T=u=>b(u.userMessage.content,{regenerateFrom:u}),j=async(u,U)=>{try{await ks(U),z({messageId:u,message:"已复制",status:"success"})}catch(q){console.error("[make-ai-assistant] copy answer failed",{errorType:q instanceof Error?q.name:typeof q}),z({messageId:u,message:"复制失败",status:"error"})}},V=u=>{u.preventDefault(),I(R)},K=u=>{u.key==="Enter"&&!u.shiftKey&&!u.nativeEvent.isComposing&&(u.preventDefault(),I(R))},P=()=>{if(y.enabled){y.stop();return}n("stop")&&ae(u=>v.reduceAssistantEvent(u,{type:"run.cancelled"}))},pe=()=>{if(D(!1),y.enabled){ee(""),y.create(),d?.();return}n("new-conversation"),ee(""),L(void 0),z(void 0),G(!1),fe.current=!0,ae(v.createAssistantConversationState()),d?.()},Fe=y.enabled&&y.cancelling.length?"停止中":A.features?.remoteCancellation===!1?"停止接收":"停止生成",Ge=Pt(F),ve=Bt(F),be=Ps(F),Me=typeof A.regenerate=="function"&&A.features?.regeneration!==!1,dt=()=>{if(y.enabled){y.retry();return}be&&I(be.content)},Wt=u=>{if(u.key==="Escape"&&!(!S&&!Z)){if(u.preventDefault(),u.stopPropagation(),S){X(!1),De.current?.focus();return}D(!1),Oe.current?.focus()}};return t.jsxs("section",{className:`make-ai-assistant make-ai-assistant__panel${y.enabled?" make-ai-assistant__panel--managed":""}`,ref:$e,style:C,onKeyDown:Wt,onDragOver:u=>{N.enabled&&u.dataTransfer.types.includes("Files")&&u.preventDefault()},onDrop:u=>{N.enabled&&u.dataTransfer.files.length&&(u.preventDefault(),N.add(Array.from(u.dataTransfer.files)))},children:[t.jsxs("header",{className:"make-ai-assistant__header",children:[t.jsx("div",{className:"make-ai-assistant__header-leading",children:y.enabled?t.jsxs("button",{"aria-controls":Xe,"aria-expanded":Z,"aria-haspopup":"dialog","aria-label":"任务列表",className:"make-ai-assistant__task-list-trigger",ref:Oe,type:"button",onClick:()=>D(u=>!u),children:[t.jsx(Ss,{}),t.jsx("span",{children:"任务列表"}),t.jsx(Cs,{})]}):null}),t.jsxs("div",{className:"make-ai-assistant__header-center",children:[t.jsx(st,{}),t.jsx("h2",{className:"make-ai-assistant__header-title",title:B,children:B})]}),t.jsxs("div",{className:"make-ai-assistant__header-actions",children:[A.features?.newConversation!==!1?t.jsx("button",{"aria-label":"新建对话",className:"make-ai-assistant__icon-button",type:"button",onClick:pe,children:t.jsx(Rs,{})}):null,c?t.jsx("button",{"aria-label":`关闭 ${B}`,className:"make-ai-assistant__icon-button",type:"button",onClick:c,children:t.jsx(Is,{})}):null]})]}),y.enabled&&Z?t.jsx(ss,{id:Xe,manager:y,triggerRef:Oe,onDismiss:()=>D(!1),onNewConversation:A.features?.newConversation!==!1?pe:void 0}):null,t.jsxs("div",{className:"make-ai-assistant__body","aria-live":"polite","aria-relevant":"additions text",ref:xe,role:"log",onScroll:m,children:[Q==="loading"?t.jsxs("div",{className:"make-ai-assistant__empty",role:"status",children:[t.jsx(st,{}),t.jsx("h3",{children:"正在恢复对话"}),t.jsx("p",{children:"正在读取当前 App 的历史消息…"})]}):Q==="error"?t.jsx("div",{className:"make-ai-assistant__empty",children:t.jsx(Ks,{error:oe,onRetry:()=>he(u=>u+1)})}):F.messages.length===0?t.jsxs("div",{className:"make-ai-assistant__empty",children:[t.jsx(st,{}),t.jsx("h3",{children:"有什么可以帮你?"}),t.jsx("p",{children:"我会结合当前 App、页面位置和宿主允许的上下文回答,并把过程与结果分开展示。"})]}):Ws(F,a,Ze,$,o,r,e,be?dt:void 0,M,H,k,Me,(u,U)=>{j(u,U)},u=>{T(u)},y.enabled?y:void 0,A),F.progress&&!Ge?t.jsx(Mt,{assistantName:e,progress:F.progress}):null,F.error&&!ve?t.jsx(Mt,{assistantName:e,error:F.error,onRetry:be?dt:void 0}):null]}),Le?t.jsx("button",{"aria-label":"回到最新消息",className:"make-ai-assistant__back-to-latest",type:"button",onClick:x,children:t.jsx(Ms,{})}):null,t.jsxs("footer",{className:"make-ai-assistant__composer-region",children:[N.enabled?t.jsx(us,{attachments:N}):null,Q==="ready"&&_e.length>0&&F.messages.length===0?t.jsx("div",{className:"make-ai-assistant__suggestions","aria-label":"推荐问题",children:_e.map((u,U)=>t.jsx("button",{type:"button",onClick:()=>{I(u)},children:u},`${U}-${u}`))}):null,t.jsxs("form",{className:"make-ai-assistant__composer",onSubmit:V,children:[t.jsx("textarea",{"aria-label":`向 ${e} 提问`,"aria-describedby":W?"make-ai-composer-error":void 0,"aria-invalid":W?!0:void 0,autoFocus:!0,disabled:Q!=="ready"||!y.enabled&&F.status==="streaming",placeholder:`询问当前 ${a.app.name??"App"} 中的数据…`,ref:We,rows:2,value:R,onChange:u=>{ee(u.currentTarget.value),L(void 0)},onKeyDown:K,onPaste:u=>{N.enabled&&u.clipboardData.files.length&&(u.preventDefault(),N.add(Array.from(u.clipboardData.files)))}}),N.enabled?t.jsx(ds,{attachments:N,open:S,triggerRef:De,onOpenChange:X}):null,t.jsxs("div",{className:"make-ai-assistant__composer-actions",children:[F.status==="streaming"?t.jsx("button",{"aria-label":Fe,className:"make-ai-assistant__send make-ai-assistant__send--stop","data-tooltip":Fe,ref:Ve,disabled:y.enabled&&y.cancelling.includes(F.activeRunId??""),type:"button",onClick:P,children:t.jsx("span",{"aria-hidden":"true"})}):t.jsx("button",{"aria-label":"发送",className:"make-ai-assistant__send",disabled:Q!=="ready"||N.pending||!R.trim()&&!N.parts.length,type:"submit",children:t.jsx(It,{})}),y.enabled&&F.status==="streaming"?t.jsx("button",{"aria-label":"发送",className:"make-ai-assistant__send",disabled:y.busy||N.pending||!R.trim()&&!N.parts.length,type:"submit",children:t.jsx(It,{})}):null]})]}),W?t.jsx("p",{id:"make-ai-composer-error",role:"alert",children:W}):null,t.jsx("p",{children:"AI 生成的结果可能存在偏差,重要数据请核对明细。"})]})]})}function Vs(e){return t.jsx(Ut,{...e,visible:!0})}function qs({defaultOpen:e=!1,hideLauncher:s=!1,launcher:a,launcherPosition:o="bottom-right",maxDrawerWidth:r,onOpenChange:c,open:d,...f}){const g=Lt(f.brandName,f.title),[h,_]=i.useState(e),[$,A]=i.useState(()=>e||d===!0),H=i.useRef(null),M=i.useRef(null),O=i.useRef(void 0),[y,N]=i.useState(),[B,p]=i.useState(vs),[l,C]=i.useState(!1),R=d??h,ee=ct(f.theme),S=ys(r),X=()=>xs(B,S,typeof window>"u"?$t:window.innerWidth),Z=X(),D=y===void 0?void 0:rt(y,B,Z),J=D===void 0&&S===void 0?void 0:{...D===void 0?{}:{"--make-ai-internal-drawer-width":`${D}px`},...S===void 0?{}:{"--make-ai-internal-drawer-max-width":`max(var(--make-ai-internal-drawer-min-width), ${S}px)`}};i.useLayoutEffect(()=>{D!==void 0&&D!==y&&N(D)},[D,y]);const ue=()=>{if(D!==void 0)return D;const k=M.current?.getBoundingClientRect().width;return k&&Number.isFinite(k)&&k>0?k:B},me=k=>{if(k.button!==0)return;const z=ue(),te=y===void 0?z:B;p(te),O.current={minimumWidth:te,pointerId:k.pointerId,startWidth:z,startX:k.clientX},C(!0),typeof k.currentTarget.setPointerCapture=="function"&&k.currentTarget.setPointerCapture(k.pointerId),k.preventDefault()},F=k=>{const z=O.current;if(!z||z.pointerId!==k.pointerId)return;const te=rt(z.startWidth+z.startX-k.clientX,z.minimumWidth,X());N(te)},ae=k=>{const z=O.current;!z||z.pointerId!==k.pointerId||(O.current=void 0,C(!1))},ie=k=>{const z=k.key==="ArrowLeft"?_t:k.key==="ArrowRight"?-_t:void 0;if(z===void 0)return;k.preventDefault();const te=ue(),he=y===void 0?te:B;p(he),N(rt(te+z,he,X()))},W=k=>{d===void 0&&_(k),c?.(k),k||requestAnimationFrame(()=>H.current?.focus())},L=()=>W(!R);return i.useEffect(()=>{R&&A(!0)},[R]),i.useEffect(()=>{if(!R)return;const k=z=>{z.key==="Escape"&&(W(!1),requestAnimationFrame(()=>H.current?.focus()))};return document.addEventListener("keydown",k),()=>document.removeEventListener("keydown",k)},[c,R]),t.jsxs("div",{className:"make-ai-assistant","data-open":R||void 0,style:ee,children:[!s&&(!R||a)?a?a({open:R,toggle:L}):t.jsxs("button",{"aria-label":R?`关闭 ${g}`:`打开 ${g}`,"aria-expanded":R,className:"make-ai-assistant__launcher","data-launcher-position":o,ref:H,type:"button",onClick:L,children:[t.jsx("span",{className:"make-ai-assistant__launcher-orbit","aria-hidden":"true"}),t.jsx(Dt,{})]}):null,$?t.jsxs("aside",{"aria-label":g,"aria-modal":"false",className:"make-ai-assistant__drawer","data-resizing":l||void 0,hidden:!R,ref:M,role:"dialog",style:J,children:[t.jsx("div",{"aria-label":"调整对话框宽度","aria-orientation":"vertical","aria-valuemax":Z,"aria-valuemin":B,"aria-valuenow":D??B,className:"make-ai-assistant__drawer-resize-handle",role:"separator",tabIndex:0,onKeyDown:ie,onPointerCancel:ae,onPointerDown:me,onPointerMove:F,onPointerUp:ae}),t.jsx(Ut,{...f,onClose:()=>W(!1),visible:R})]}):null]})}exports.createArtifactCapabilities=Ae.createArtifactCapabilities;exports.createArtifactTemplateRegistry=Ae.createArtifactTemplateRegistry;exports.extendArtifactTemplateRegistry=Ae.extendArtifactTemplateRegistry;exports.resolveArtifactTemplate=Ae.resolveArtifactTemplate;exports.MAKE_AI_ARTIFACT_KINDS=v.MAKE_AI_ARTIFACT_KINDS;exports.MAKE_AI_ARTIFACT_LIMITS=v.MAKE_AI_ARTIFACT_LIMITS;exports.MAKE_AI_ARTIFACT_SCHEMA_VERSION=v.MAKE_AI_ARTIFACT_SCHEMA_VERSION;exports.MAKE_AI_CONVERSATION_LIMITS=v.MAKE_AI_CONVERSATION_LIMITS;exports.appendUserMessage=v.appendUserMessage;exports.createAssistantConversationState=v.createAssistantConversationState;exports.parseArtifact=v.parseArtifact;exports.parseAssistantEvent=v.parseAssistantEvent;exports.reduceAssistantEvent=v.reduceAssistantEvent;exports.validateArtifact=v.validateArtifact;exports.ArtifactRenderer=St;exports.AssistantPanel=Vs;exports.MakeAiAssistant=qs;exports.createPlatformArtifactRegistry=Nt;exports.formatArtifactValue=Ie;exports.platformArtifactTemplates=Tt;