@qfei-design/make-ai-assistant 0.2.16 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PUBLIC_API.md +40 -0
- package/README.md +25 -11
- package/capabilities.json +27 -0
- package/dist/client-types.d.ts +1 -0
- package/dist/client.cjs +2 -2
- package/dist/client.mjs +46 -41
- package/dist/core/conversation-management.d.ts +1 -0
- package/dist/react/use-conversation-manager.d.ts +3 -0
- package/dist/react.cjs +6 -4
- package/dist/react.mjs +1339 -1311
- package/dist/styles.css +31 -14
- package/docs/make-app-integration.md +56 -1
- package/examples/make-app/README.md +21 -3
- package/package.ai.json +1 -1
- package/package.json +1 -1
package/dist/react.cjs
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),c=require("react"),xe=require("./index.cjs"),w=require("./conversation-BpmWa2VL.cjs"),ht=require("./conversation-management-f1y0yRvt.cjs"),Ht=require("react-dom"),Kt=e=>e?.trim()||void 0,fe=(e,t)=>Kt(e)??t,kt=e=>{const t=Kt(e?.primary);if(t)return{"--make-ai-theme-primary":t,"--make-ai-theme-primary-hover":fe(e?.primaryHover,"color-mix(in srgb, var(--make-ai-theme-primary) 84%, #15233d)"),"--make-ai-theme-on-primary":fe(e?.onPrimary,"#fcfcff"),"--make-ai-theme-bg":fe(e?.background,"color-mix(in srgb, var(--make-ai-theme-primary) 2%, #fcfcff)"),"--make-ai-theme-surface":fe(e?.surface,"color-mix(in srgb, var(--make-ai-theme-primary) 4%, var(--make-ai-theme-bg))"),"--make-ai-theme-surface-strong":fe(e?.surfaceStrong,"color-mix(in srgb, var(--make-ai-theme-primary) 8%, var(--make-ai-theme-bg))"),"--make-ai-theme-text":fe(e?.text,"color-mix(in srgb, var(--make-ai-theme-primary) 12%, #252631)"),"--make-ai-theme-text-secondary":fe(e?.textSecondary,"color-mix(in srgb, var(--make-ai-theme-text) 74%, var(--make-ai-theme-primary))"),"--make-ai-theme-border":fe(e?.border,"color-mix(in srgb, var(--make-ai-theme-primary) 14%, var(--make-ai-theme-bg))"),"--make-ai-theme-overlay":fe(e?.overlay,"color-mix(in srgb, var(--make-ai-theme-text) 88%, var(--make-ai-theme-primary))"),"--make-ai-theme-on-overlay":fe(e?.onOverlay,"#fcfcff")}},Et=(e,t)=>!t||!c.isValidElement(e)||typeof e.type!="string"?e:c.cloneElement(e,{style:{...e.props.style,...t}});function Vt({artifact:e,context:t,fallback:s,onAction:n,onActionError:r,registry:l,theme:d}){const m=kt(d),y=xe.resolveArtifactTemplate(l,e,t);if(!y){const A=s?s(e):a.jsxs("section",{className:"make-ai-artifact make-ai-artifact--unsupported",role:"status",children:[a.jsx("strong",{children:"暂不支持展示此结果"}),a.jsxs("span",{children:["结果类型:",e.kind]})]});return Et(A,m)}const v={context:t,onAction:n,onActionError:r,theme:d,themeStyle:m},f=y.template.render(e,t,v);return Et(f,m)}const be=(e,t,s)=>{if(e==null||e==="")return"—";if(typeof e=="boolean")return e?"是":"否";if(typeof e!="number")return`${e}${t?.unit??""}`;const n=t?.precision,r={maximumFractionDigits:n??2,minimumFractionDigits:n};t?.style==="currency"&&t.currency?(r.style="currency",r.currency=t.currency):t?.style==="percent"&&(r.style="percent");try{const l=t?.style==="percent"?e/100:e;return`${new Intl.NumberFormat(s,r).format(l)}${t?.unit??""}`}catch{return`${e}${t?.unit??""}`}},Bt=e=>{let t=Number.POSITIVE_INFINITY,s=Number.NEGATIVE_INFINITY;for(const n of e)t=Math.min(t,n),s=Math.max(s,n);return Number.isFinite(t)&&Number.isFinite(s)?{min:t,max:s}:{min:0,max:0}},Wt=(e,t,s)=>{if(!s.onAction)return;const n=l=>{console.error("[make-ai-assistant] host action error handler failed",{actionId:e.id,artifactId:t.artifact.id,errorType:l instanceof Error?l.name:typeof l,intent:e.intent})},r=l=>{if(s.onActionError){try{Promise.resolve(s.onActionError(l,e,t)).catch(n)}catch(d){n(d)}return}console.error("[make-ai-assistant] host action failed",{actionId:e.id,artifactId:t.artifact.id,errorType:l instanceof Error?l.name:typeof l,intent:e.intent})};try{Promise.resolve(s.onAction(e,t)).catch(r)}catch(l){r(l)}},De=(e,t)=>e.actions?.length&&t.onAction?a.jsx("div",{className:"make-ai-artifact__actions",children:e.actions.map(s=>a.jsxs("button",{className:`make-ai-artifact__action make-ai-artifact__action--${s.appearance??"link"}`,type:"button",onClick:()=>Wt(s,{artifact:e,context:t.context},t),children:[s.label,a.jsx("span",{"aria-hidden":"true",children:"→"})]},s.id))}):null,Oe=(e,t,s="",n)=>a.jsxs("section",{"aria-label":e.title??`${e.kind} result`,className:`make-ai-artifact ${s}`.trim(),"data-artifact-density":e.presentation?.density,"data-artifact-kind":e.kind,style:n,children:[e.title?a.jsx("h4",{className:"make-ai-artifact__title",children:e.title}):null,e.summary?a.jsx("p",{className:"make-ai-artifact__summary",children:e.summary}):null,t]}),Ea=({artifact:e,renderContext:t})=>{const s=e.data.delta,n=s?be(s.value,s.format==="percent"?{style:"percent"}:void 0,t.context.locale):void 0;return Oe(e,a.jsxs(a.Fragment,{children:[a.jsx("div",{className:"make-ai-artifact__metric-value",children:be(e.data.value,e.data.format,t.context.locale)}),s?a.jsxs("div",{className:`make-ai-artifact__delta make-ai-artifact__delta--${s.direction??"flat"}`,children:[a.jsx("span",{"aria-hidden":"true",children:s.direction==="up"?"↗":s.direction==="down"?"↘":"→"}),a.jsx("span",{children:n}),s.label?a.jsx("span",{children:s.label}):null]}):null,e.data.context?a.jsx("p",{className:"make-ai-artifact__context",children:e.data.context}):null,De(e,t)]}),"make-ai-artifact--metric",t.themeStyle)},Ta=({artifact:e,renderContext:t})=>Oe(e,a.jsxs(a.Fragment,{children:[a.jsx("div",{className:"make-ai-artifact__comparison",children:e.data.items.map(s=>a.jsxs("div",{className:"make-ai-artifact__comparison-item",children:[a.jsx("span",{children:s.label}),a.jsx("strong",{children:be(s.value,s.format,t.context.locale)}),s.hint?a.jsx("small",{children:s.hint}):null]},s.id))}),De(e,t)]}),"make-ai-artifact--comparison",t.themeStyle),Ra=({artifact:e,renderContext:t})=>{const s=e.data.series.flatMap(d=>d.points.map(m=>m.y)),{max:n,min:r}=Bt(s),l=n-r||1;return Oe(e,a.jsxs(a.Fragment,{children:[a.jsx("div",{className:"make-ai-artifact__trend",children:e.data.series.map(d=>a.jsxs("div",{className:"make-ai-artifact__trend-series",children:[a.jsx("div",{className:"make-ai-artifact__trend-label",children:d.label}),a.jsx("div",{className:"make-ai-artifact__trend-bars",children:d.points.map((m,y)=>{const v=18+(m.y-r)/l*70;return a.jsxs("div",{className:"make-ai-artifact__trend-point",children:[a.jsx("span",{"aria-label":`${m.x}: ${be(m.y,d.format,t.context.locale)}`,className:"make-ai-artifact__trend-bar",role:"img",style:{height:`${v}%`},title:`${m.x}: ${be(m.y,d.format,t.context.locale)}`}),a.jsx("small",{children:m.x})]},`${m.x}-${y}`)})})]},d.id))}),De(e,t)]}),"make-ai-artifact--trend",t.themeStyle)},$a=({artifact:e,renderContext:t})=>{const{max:s}=Bt(e.data.items.map(r=>Math.abs(r.value))),n=Math.max(s,1);return Oe(e,a.jsxs(a.Fragment,{children:[a.jsx("ol",{className:"make-ai-artifact__ranking",children:e.data.items.map((r,l)=>a.jsxs("li",{children:[a.jsx("span",{className:"make-ai-artifact__rank",children:l+1}),a.jsxs("span",{className:"make-ai-artifact__ranking-label",children:[a.jsx("span",{children:r.label}),r.description?a.jsx("small",{children:r.description}):null]}),a.jsx("span",{className:"make-ai-artifact__ranking-track","aria-hidden":"true",children:a.jsx("span",{style:{width:`${Math.abs(r.value)/n*100}%`}})}),a.jsx("strong",{children:be(r.value,r.format,t.context.locale)})]},r.id))}),De(e,t)]}),"make-ai-artifact--ranking",t.themeStyle)},La=(e,t)=>t.action??{id:`open-${t.id}`,label:t.title??t.id,intent:"open-record",target:{entityKey:e.data.entity.key,recordId:t.id}},za=({artifact:e,renderContext:t})=>Oe(e,a.jsxs(a.Fragment,{children:[a.jsx("div",{className:"make-ai-artifact__record-list",children:e.data.records.length===0?a.jsx("p",{className:"make-ai-artifact__empty",children:"没有符合条件的记录"}):e.data.records.map(s=>{const n=La(e,s),r=a.jsxs(a.Fragment,{children:[a.jsx("strong",{children:s.title??s.id}),a.jsx("span",{className:"make-ai-artifact__record-values",children:e.data.columns.map(l=>a.jsxs("span",{children:[a.jsx("small",{children:l.label}),be(s.values[l.key],l.format,t.context.locale)]},l.key))}),t.onAction?a.jsx("span",{"aria-hidden":"true",children:"›"}):null]});return t.onAction?a.jsx("button",{className:"make-ai-artifact__record",type:"button",onClick:()=>Wt(n,{artifact:e,context:t.context},t),children:r},s.id):a.jsx("div",{className:"make-ai-artifact__record",children:r},s.id)})}),e.data.total!==void 0?a.jsxs("p",{className:"make-ai-artifact__record-total",children:["共 ",e.data.total," 条"]}):null,De(e,t)]}),"make-ai-artifact--record-list",t.themeStyle),Da=({artifact:e,renderContext:t})=>Oe(e,a.jsxs(a.Fragment,{children:[a.jsxs("div",{className:`make-ai-artifact__notice make-ai-artifact__notice--${e.data.tone}`,children:[a.jsx("span",{"aria-hidden":"true",children:e.data.tone==="success"?"✓":e.data.tone==="warning"?"!":e.data.tone==="danger"?"×":"i"}),a.jsx("p",{children:e.data.body})]}),De(e,t)]}),"make-ai-artifact--notice",t.themeStyle),Le=(e,t,s)=>({id:e,kinds:[t],priority:0,render:s}),Oa=[Le("platform.metric.default","metric",(e,t,s)=>a.jsx(Ea,{artifact:e,renderContext:s})),Le("platform.comparison.default","comparison",(e,t,s)=>a.jsx(Ta,{artifact:e,renderContext:s})),Le("platform.trend.default","trend",(e,t,s)=>a.jsx(Ra,{artifact:e,renderContext:s})),Le("platform.ranking.default","ranking",(e,t,s)=>a.jsx($a,{artifact:e,renderContext:s})),Le("platform.record-list.default","record-list",(e,t,s)=>a.jsx(za,{artifact:e,renderContext:s})),Le("platform.notice.default","notice",(e,t,s)=>a.jsx(Da,{artifact:e,renderContext:s}))],Xt=xe.createArtifactTemplateRegistry(Oa).templates,Gt=(e=Xt)=>xe.createArtifactTemplateRegistry(e);const Pa=e=>e?.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();function Ua(e,t,s=[]){if(t==null)throw new Error("[lucide]: iconNode is required when icon name is used");return{name:Pa(e),size:24,node:t,...s.length>0?{aliases:s}:{}}}const Fa=e=>{let t="",s=!1;for(const n of e){if(n==="-"||n==="_"||n<=" "){s=t.length>0;continue}t.length===0?t+=n.toLowerCase():t+=s?n.toUpperCase():n,s=!1}return t};const qa=e=>{const t=Fa(e);return t.charAt(0).toUpperCase()+t.slice(1)};const gt=(...e)=>e.filter((t,s,n)=>!!t&&t.trim()!==""&&n.indexOf(t)===s).join(" ").trim();const Ce={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};function ft(e){return e!=null}function Ha(e,t={}){const s=t.attributeNames??{},n=N=>s[N]??N,r=e.size??e.width??Ce.width,l=e.size??e.height??Ce.height,d=e.aliases?.filter(N=>typeof N=="string"&&N.trim()!=="").map(N=>`lucide-${N}`)??[],m=[...e.name?[`lucide-${e.name}`]:[],...d],y=t.className?.split(" ").filter(Boolean)??[],v=t.includeDefaultClasses===!1?gt(...y):gt("lucide",...m,...y),f=t.absoluteStrokeWidth?Number(t.strokeWidth??Ce["stroke-width"])*Number(e.size??e.width??Ce.width)/Number(t.size??t.width??Ce.width):t.strokeWidth??Ce["stroke-width"];return["svg",{...Object.entries(Ce).reduce((N,[E,g])=>(N[n(E)]=g,N),{}),..."color"in t&&t.color&&{[n("stroke")]:t.color},..."size"in t&&ft(t.size)&&{[n("width")]:t.size,[n("height")]:t.size},..."width"in t&&ft(t.width)&&{[n("width")]:t.width},..."height"in t&&ft(t.height)&&{[n("height")]:t.height},[n("stroke-width")]:f,...v&&{[n("class")]:v},[n("viewBox")]:`0 0 ${r} ${l}`,...t.hasA11yProp===!1?{[n("aria-hidden")]:"true"}:{},..."attributes"in t&&t.attributes},e.node.map(N=>{const[E,g,D]=N,R=t.nonScalingStroke?{[n("vector-effect")]:"non-scaling-stroke",...g}:g;return D?[E,R,D]:[E,R]})]}function Ka(e,t={}){return Ha(e,{...t,attributeNames:{...t.attributeNames,class:"className","stroke-width":"strokeWidth","stroke-linecap":"strokeLinecap","stroke-linejoin":"strokeLinejoin","vector-effect":"vectorEffect"}})}const Va=e=>{for(const t in e)if(t.startsWith("aria-")||t==="role"||t==="title")return!0;return!1},Ba=c.createContext({}),Wa=()=>c.useContext(Ba),Xa=c.forwardRef(({color:e,size:t,width:s,height:n,strokeWidth:r,absoluteStrokeWidth:l,nonScalingStroke:d,className:m="",children:y,iconNode:v=[],icon:f={node:v,aliases:[],size:24},...A},N)=>{const{size:E=24,strokeWidth:g=2,absoluteStrokeWidth:D=!1,nonScalingStroke:R=!1,color:P="currentColor",className:b=""}=Wa()??{},h=!!y||Va(A),[i,_,C=[]]=Ka(f,{color:e??P,width:s??t??E,height:n??t??E,strokeWidth:r??g,absoluteStrokeWidth:l??D,nonScalingStroke:d??R,className:gt(b,m),hasA11yProp:h,attributes:A});return c.createElement(i,{ref:N,..._},[...C.map(([B,I])=>c.createElement(B,I)),...Array.isArray(y)?y:[y]])});function q(e,t=[],s=[]){const n=typeof e=="string"?Ua(e,t,s):e,r=c.forwardRef(({className:l,...d},m)=>c.createElement(Xa,{ref:m,icon:n,className:l,...d}));return n.name&&(r.displayName=qa(n.name)),r}const Zt={name:"arrow-down-to-line",size:24,node:[["path",{d:"M12 17V3",key:"1cwfxf"}],["path",{d:"m6 11 6 6 6-6",key:"12ii2o"}],["path",{d:"M19 21H5",key:"150jfl"}]]};Zt.node;const Ga=q(Zt);const Jt={name:"check",size:24,node:[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]};Jt.node;const Za=q(Jt);const Yt={name:"chevron-down",size:24,node:[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]};Yt.node;const Ja=q(Yt);const Qt={name:"chevron-up",size:24,node:[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]};Qt.node;const Ya=q(Qt);const ea={name:"circle-alert",size:24,node:[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]],aliases:["alert-circle"]};ea.node;const Qa=q(ea);const ta={name:"cloud-off",size:24,node:[["path",{d:"M10.94 5.274A7 7 0 0 1 15.71 10h1.79a4.5 4.5 0 0 1 4.222 6.057",key:"1uxyv8"}],["path",{d:"M18.796 18.81A4.5 4.5 0 0 1 17.5 19H9A7 7 0 0 1 5.79 5.78",key:"99tcn7"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]};ta.node;const es=q(ta);const aa={name:"copy",size:24,node:[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]};aa.node;const ts=q(aa);const sa={name:"file-text",size:24,node:[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]};sa.node;const Tt=q(sa);const na={name:"list",size:24,node:[["path",{d:"M3 5h.01",key:"18ugdj"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M3 19h.01",key:"noohij"}],["path",{d:"M8 5h13",key:"1pao27"}],["path",{d:"M8 12h13",key:"1za7za"}],["path",{d:"M8 19h13",key:"m83p4d"}]]};na.node;const as=q(na);const ra={name:"maximize",size:24,node:[["path",{d:"M8 3H5a2 2 0 0 0-2 2v3",key:"1dcmit"}],["path",{d:"M21 8V5a2 2 0 0 0-2-2h-3",key:"1e4gt3"}],["path",{d:"M3 16v3a2 2 0 0 0 2 2h3",key:"wsl5sc"}],["path",{d:"M16 21h3a2 2 0 0 0 2-2v-3",key:"18trek"}]]};ra.node;const ss=q(ra);const ia={name:"message-square-text",size:24,node:[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}],["path",{d:"M7 11h10",key:"1twpyw"}],["path",{d:"M7 15h6",key:"d9of3u"}],["path",{d:"M7 7h8",key:"af5zfr"}]]};ia.node;const ns=q(ia);const oa={name:"minimize",size:24,node:[["path",{d:"M8 3v3a2 2 0 0 1-2 2H3",key:"hohbtr"}],["path",{d:"M21 8h-3a2 2 0 0 1-2-2V3",key:"5jw1f3"}],["path",{d:"M3 16h3a2 2 0 0 1 2 2v3",key:"198tvr"}],["path",{d:"M16 21v-3a2 2 0 0 1 2-2h3",key:"ph8mxp"}]]};oa.node;const rs=q(oa);const ca={name:"pause",size:24,node:[["rect",{x:"14",y:"3",width:"5",height:"18",rx:"1",key:"kaeet6"}],["rect",{x:"5",y:"3",width:"5",height:"18",rx:"1",key:"1wsw3u"}]]};ca.node;const is=q(ca);const la={name:"pencil",size:24,node:[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]};la.node;const os=q(la);const da={name:"pin",size:24,node:[["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z",key:"1nkz8b"}]]};da.node;const cs=q(da);const ua={name:"plus",size:24,node:[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]};ua.node;const _t=q(ua);const ma={name:"refresh-cw",size:24,node:[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]};ma.node;const dt=q(ma);const ha={name:"rotate-ccw",size:24,node:[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]};ha.node;const ls=q(ha);const fa={name:"send",size:24,node:[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]]};fa.node;const Rt=q(fa);const pa={name:"sparkles",size:24,node:[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]],aliases:["stars"]};pa.node;const va=q(pa);const ya={name:"thumbs-down",size:24,node:[["path",{d:"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z",key:"m61m77"}],["path",{d:"M17 14V2",key:"8ymqnk"}]]};ya.node;const ds=q(ya);const ga={name:"thumbs-up",size:24,node:[["path",{d:"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z",key:"emmmcr"}],["path",{d:"M7 10v12",key:"1qc93n"}]]};ga.node;const us=q(ga);const ka={name:"trash",size:24,node:[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],aliases:["trash-2"]};ka.node;const $t=q(ka);const _a={name:"triangle-alert",size:24,node:[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]],aliases:["alert-triangle"]};_a.node;const ms=q(_a);const ba={name:"upload",size:24,node:[["path",{d:"M12 3v12",key:"1x0j5s"}],["path",{d:"m17 8-5-5-5 5",key:"7q97r8"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}]]};ba.node;const hs=q(ba);const xa={name:"x",size:24,node:[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]};xa.node;const Ze=q(xa),ze=()=>globalThis.crypto.randomUUID(),Lt=1e3,pt=(e,t)=>e?.chatId===t.chatId&&e.revision>t.revision?e:t,bt=e=>{const t=e,s=t?.status??t?.response?.status;return s===410||t?.code==="AI_UPLOAD_EXPIRED"?"上传已过期,请移除后重新选择文件":s===409?"数据已变化或对话仍在运行,请刷新后重试":s===401||t?.code==="AI_AUTH_REQUIRED"||t?.code==="AI_AUTH_EXPIRED"?"登录已失效,请重新登录":s===403?"当前账号无权访问该对话":s===404?"对话或回答已不可见,请刷新列表":t?.message?.startsWith("输入内容过长")?t.message:"操作未完成,请重试或刷新对话"};function fs(e,t){const s=t.features?.conversationManagement===!0,n=s?t.scopeKey?.(e)??e.app.id:"",r=c.useRef(n);r.current=n;const l=c.useRef(n),[d,m]=c.useState(w.createAssistantConversationState),y=c.useRef(d),v=o=>{const u=typeof o=="function"?o(y.current):o;y.current=u,m(u)},[f,A]=c.useState([]),[N,E]=c.useState(),g=c.useRef(void 0),[D,R]=c.useState(""),[P,b]=c.useState(void 0),[h,i]=c.useState(!1),[_,C]=c.useState(!1),[B,I]=c.useState(s),[W,Y]=c.useState(!1),[se,G]=c.useState(),[ce,me]=c.useState([]),[je,Pe]=c.useState([]),U=c.useRef(new Set),K=c.useRef(new Map),O=c.useRef(0),J=c.useRef(0),re=c.useRef(0),pe=c.useRef(void 0),le=c.useRef(void 0),we=c.useRef(new Map),z=(o,u=n)=>J.current===o&&r.current===u,te=()=>{const o=new AbortController;return U.current.add(o),o},Q=o=>U.current.delete(o),ee=o=>{const u=o?pt(g.current,o):void 0;g.current=u,E(u)},Ue=o=>{A(u=>u.map(k=>k.chatId===o.chatId?pt(k,o):k))},Fe=o=>{A(u=>u.filter(k=>k.chatId!==o))},Je=()=>{re.current+=1},ie=()=>{for(const o of K.current.values())o.abort();K.current.clear()},X=o=>{o instanceof Error&&o.name==="AbortError"||(console.warn("[make-ai-assistant] conversation operation failed",{errorType:o instanceof Error?o.name:typeof o}),G(bt(o)))},oe=async o=>{if(!s||!t.listConversations)return;const u=J.current,k=++re.current,x=te();try{const S=await t.listConversations(e,{cursor:o},{signal:x.signal});if(!z(u)||x.signal.aborted||k!==re.current)return;A($=>{const j=new Map($.map(M=>[M.chatId,M])),T=S.chats.map(M=>pt(j.get(M.chatId),M));return[...new Map([...o?$:[],...T].map(M=>[M.chatId,M])).values()]}),R(S.nextCursor)}catch(S){z(u)&&!x.signal.aborted&&k===re.current&&X(S)}finally{Q(x),z(u)&&k===re.current&&I(!1)}},ge=async o=>{if(!t.getConversation)return;const u=J.current,k=te();try{const x=await t.getConversation(e,{chatId:o},{signal:k.signal});if(!z(u)||k.signal.aborted||x.chatId!==o)return;Ue(x),g.current?.chatId===o&&ee(x)}catch(x){z(u)&&!k.signal.aborted&&X(x)}finally{Q(k)}},Ie=async(o,u,k)=>{const x=J.current,S=O.current;let $;try{for await(const j of o){if(!z(x)||u.signal.aborted||S!==O.current||g.current?.chatId!==k)return;const T=w.parseAssistantEvent(j);if(T.type==="response.accepted"||T.type==="response.state"){$=T.responseId;const M=K.current.get($);if(M&&M!==u){T.type==="response.accepted"&&v(F=>w.reduceAssistantEvent(F,T)),u.abort();return}K.current.set($,u)}v(M=>w.reduceAssistantEvent(M,T)),T.type==="response.accepted"&&ge(k),T.type==="response.terminal"&&(me(M=>M.filter(F=>F!==T.responseId)),oe())}}catch(j){z(x)&&!u.signal.aborted&&S===O.current&&(X(j),$||v(T=>({...T,status:Object.values(T.responses??{}).some(M=>!ht.isResponseTerminal(M))?"streaming":"error"})))}finally{$&&K.current.get($)===u&&K.current.delete($),Q(u)}},ke=async(o,u,k,x)=>{if(!t.getResponse||!t.watchResponse)return;const S=new Set(o.filter(j=>j.role==="assistant"&&j.persistent).map(j=>j.responseId)),$=[...new Map(o.filter(j=>j.role==="user"&&j.responseId&&!S.has(j.responseId)).map(j=>[j.responseId,j.cursor])).entries()].slice(-20);for(const[j,T]of $){if(!z(x)||k!==O.current)return;if(K.current.has(j))continue;const M=te();try{const F=await t.getResponse(e,{chatId:u,responseId:j},{signal:M.signal});if(!z(x)||M.signal.aborted||k!==O.current||K.current.has(j))continue;v(ve=>w.reduceAssistantEvent(ve,ht.isResponseTerminal(F)?{type:"response.snapshot",snapshot:F}:{type:"response.state",chatId:u,responseId:j,status:F.status})),F.status==="failed"||F.status==="cancelled"?v(ve=>w.reduceAssistantEvent(ve,{type:"response.terminal",chatId:u,responseId:j,status:F.status})):(K.current.set(j,M),Ie(t.watchResponse(e,{chatId:u,responseId:j,historyCursor:T},{signal:M.signal}),M,u))}catch(F){z(x)&&!M.signal.aborted&&X(F)}finally{K.current.get(j)!==M&&Q(M)}}},Se=async o=>{const u=++O.current,k=J.current,x=te();ie(),G(void 0),I(!0),me([]),le.current=void 0,ee(o),v({messages:[],status:"idle",threadId:o.chatId}),b(void 0),i(!1),C(!1);try{const[S,$]=await Promise.all([t.getConversation(e,{chatId:o.chatId},{signal:x.signal}),t.loadConversation(e,{threadId:o.chatId,cursor:void 0,signal:x.signal})]);if(!z(k)||x.signal.aborted||u!==O.current)return;if(S.chatId!==o.chatId||$.threadId!==o.chatId)throw new Error("Conversation mismatch");ee(S),v(w.createAssistantConversationState($)),b($.nextCursor??-1),i($.hasMore??!1),ke($.messages,o.chatId,u,k)}catch(S){z(k)&&!x.signal.aborted&&u===O.current&&X(S)}finally{Q(x),z(k)&&u===O.current&&I(!1)}},Me=async()=>{if(g.current)return g.current;if(pe.current??={requestId:ze()},pe.current.promise)return pe.current.promise;const o=J.current,u=O.current,k=te(),x=pe.current;return Y(!0),x.promise=t.createConversation(e,{requestId:x.requestId},{signal:k.signal}).then(S=>{if(!z(o)||k.signal.aborted||u!==O.current)throw Object.assign(new Error("Stale create"),{name:"AbortError"});return pe.current=void 0,ee(S),v({messages:[],status:"idle",threadId:S.chatId}),oe(),S}).finally(()=>{Q(k),x.promise=void 0,z(o)&&Y(!1)}),x.promise},qe=async()=>{if(!(W||pe.current?.promise)){O.current+=1,ie(),ee(void 0),G(void 0),le.current=void 0,v(w.createAssistantConversationState()),i(!1),b(void 0);try{await Me()}catch(o){X(o)}}},He=async o=>{const u=te();le.current=o,G(void 0),y.current.messages.some(k=>k.id===o.message.id)||v(k=>w.appendUserMessage(k,o.message)),await Ie(t.run(o,{signal:u.signal}),u,o.threadId)},he=async(o,u)=>{if(!(!o.trim()&&!u?.length))try{const k=await Me(),x={id:ze(),content:o,...u?{parts:u}:{}};await He({threadId:k.chatId,message:x,context:e,capabilities:{artifactSchemaVersions:[],artifactKinds:[],templates:[]}})}catch(k){X(k)}},Ye=async()=>{const o=le.current;if(!o||o.threadId!==g.current?.chatId){g.current&&await Se(g.current);return}const u=y.current.messages.find(k=>k.id===o.message.id);if(u?.responseId&&t.watchResponse){const k=u.responseId;if(K.current.has(k))return;const x=te();K.current.set(k,x),G(void 0),await Ie(t.watchResponse(e,{chatId:o.threadId,responseId:k,historyCursor:u.cursor},{signal:x.signal}),x,o.threadId)}else await He(o)},Qe=async(o=y.current.activeRunId)=>{const u=g.current;if(!u||!o||!t.cancelResponse||ce.includes(o))return;const k=J.current,x=O.current,S=te();me($=>[...$,o]),G(void 0);try{const $=await t.cancelResponse(e,{chatId:u.chatId,responseId:o},{signal:S.signal});if(!z(k)||x!==O.current)return;if(ht.isResponseTerminal($))v(j=>w.reduceAssistantEvent(j,{type:"response.snapshot",snapshot:$})),me(j=>j.filter(T=>T!==o));else if(!K.current.has(o)&&t.watchResponse){const j=te();K.current.set(o,j),Ie(t.watchResponse(e,{chatId:u.chatId,responseId:o},{signal:j.signal}),j,u.chatId)}}catch($){z(k)&&x===O.current&&(X($),me(j=>j.filter(T=>T!==o)))}finally{Q(S)}},et=async(o,u=g.current)=>{if(!u||W)return!1;const k=J.current,x=te();Y(!0),G(void 0);try{const S=await t.updateConversation(e,{chatId:u.chatId,expectedRevision:u.revision,...o},{signal:x.signal});return z(k)?(Je(),Ue(S),g.current?.chatId===S.chatId&&ee(S),!0):!1}catch(S){if(z(k)){X(S);try{const $=await t.getConversation(e,{chatId:u.chatId},{signal:x.signal});z(k)&&g.current?.chatId===u.chatId&&ee($)}catch{}oe()}return!1}finally{Q(x),z(k)&&Y(!1)}},tt=async(o=g.current)=>{if(!o||W)return!1;const u=J.current,k=te();Y(!0),G(void 0);try{return await t.deleteConversation(e,{chatId:o.chatId,expectedRevision:o.revision},{signal:k.signal}),z(u)?(Je(),Fe(o.chatId),g.current?.chatId===o.chatId&&(O.current+=1,ie(),ee(void 0),v(w.createAssistantConversationState())),!0):!1}catch(x){return z(u)&&X(x),!1}finally{Q(k),z(u)&&Y(!1)}},at=async(o,u,k="",x="")=>{const S=g.current;if(!S||!o.persistent||!t.setFeedback||je.includes(o.id))return;const $={chatId:S.chatId,messageId:o.id,rating:u,...k?{reason:k}:{},...x?{comment:x}:{}},j=we.current.get(o.id),{requestId:T,...M}=j??{requestId:""},F=j&&JSON.stringify(M)===JSON.stringify($)?j:{...$,requestId:ze()};we.current.set(o.id,F);const ve=J.current,Ne=O.current,st=te();Pe(de=>[...de,o.id]),G(void 0);try{const de=await t.setFeedback(e,F,{signal:st.signal});return!z(ve)||Ne!==O.current||we.current.get(o.id)!==F?void 0:(v(Te=>({...Te,messages:Te.messages.map(p=>p.id===o.id&&de.revision>=(p.feedback?.revision??0)?{...p,feedback:de}:p)})),we.current.delete(o.id),!0)}catch(de){return z(ve)&&Ne===O.current&&X(de),!1}finally{Q(st),z(ve)&&Pe(de=>de.filter(Te=>Te!==o.id))}},Ee=async()=>{if(!g.current||!h||B)return;const o=J.current,u=O.current,k=g.current,x=te();I(!0);try{const S=await t.loadConversation(e,{threadId:k.chatId,cursor:P,signal:x.signal});if(!z(o)||u!==O.current)return;const $=w.createAssistantConversationState(S),j=[...new Map([...y.current.messages,...$.messages].map(F=>[F.id,F])).values()];let T=0;const M=[];for(const F of j.slice(-200).reverse()){if(T+=[...F.content].length,T>1e6)break;M.unshift(F)}M.length<j.length&&C(!0),v(F=>({...F,messages:M})),b(S.nextCursor??P),i(S.hasMore??!1),ke(S.messages,k.chatId,u,o)}catch(S){z(o)&&X(S)}finally{Q(x),z(o)&&I(!1)}},Ke=[...new Set([...f.filter(o=>o.titlePending).map(o=>o.chatId),...N?.titlePending?[N.chatId]:[]])].sort().join("\0");c.useEffect(()=>{if(!s||!t.getConversation||!Ke)return;const o=J.current,u=te(),k=Ke.split("\0"),x=new Set;let S;console.debug("[make-ai-assistant] watching pending conversation titles",{count:k.length});const $=async()=>{await Promise.all(k.map(async j=>{if(!x.has(j))try{const T=await t.getConversation(e,{chatId:j},{signal:u.signal});if(!z(o)||u.signal.aborted||T.chatId!==j)return;Ue(T),g.current?.chatId===j&&ee(T)}catch(T){if(!z(o)||u.signal.aborted)return;console.warn("[make-ai-assistant] title metadata refresh failed",{errorType:T instanceof Error?T.name:typeof T});const M=T?.status;M===401?(u.abort(),X(T)):(M===403||M===404)&&(x.add(j),g.current?.chatId===j&&X(T))}})),z(o)&&!u.signal.aborted&&k.some(j=>!x.has(j))&&(S=setTimeout(()=>{$()},Lt))};return S=setTimeout(()=>{$()},Lt),()=>{clearTimeout(S),u.abort(),Q(u)}},[s,n,t,Ke]),c.useEffect(()=>(J.current+=1,l.current=n,pe.current=void 0,le.current=void 0,we.current.clear(),ee(void 0),A([]),R(""),v(w.createAssistantConversationState()),G(void 0),I(s),Y(!1),me([]),Pe([]),s&&oe(),()=>{J.current+=1,O.current+=1;for(const o of U.current)o.abort();U.current.clear(),K.current.clear()}),[s,n,t]);const Ae=l.current===n;return{enabled:s,canEdit:t.features?.conversationEditing!==!1,state:Ae?d:w.createAssistantConversationState(),setState:v,chats:Ae?f:[],chat:Ae?N:void 0,listCursor:D,historyMore:h,historyTruncated:_,loading:!Ae||B,busy:W,error:Ae?se:void 0,cancelling:ce,feedbackBusy:je,refresh:oe,select:Se,create:qe,ensureChat:Me,send:he,retry:Ye,stop:Qe,update:et,remove:tt,feedback:at,moreHistory:Ee,setError:G}}const ps=({anchor:e,label:t,onDismiss:s})=>{const[n,r]=c.useState();if(c.useLayoutEffect(()=>{const d=()=>{if(!e.isConnected){s();return}const m=e.getBoundingClientRect(),y=m.top>=48?"above":"below";r({left:m.left+m.width/2,placement:y,top:y==="above"?m.top-8:m.bottom+8})};return d(),window.addEventListener("resize",d),document.addEventListener("scroll",d,!0),()=>{window.removeEventListener("resize",d),document.removeEventListener("scroll",d,!0)}},[e,s]),!n||typeof document>"u")return null;const l=e.closest(".make-ai-assistant")??document.body;return Ht.createPortal(a.jsx("span",{className:"make-ai-assistant__conversation-tooltip","data-placement":n.placement,role:"tooltip",style:{left:n.left,top:n.top},children:t}),l)};function vs({id:e,manager:t,onDismiss:s,onNewConversation:n,triggerRef:r}){const[l,d]=c.useState(),[m,y]=c.useState(""),[v,f]=c.useState(),[A,N]=c.useState(),E=c.useRef(null),g=(i,_)=>{N(C=>C?.anchor===_&&C.label===i?C:{anchor:_,label:i})},D=i=>{N(_=>_?.anchor===i?void 0:_)},R=i=>({"data-tooltip":i,onBlur:_=>D(_.currentTarget),onFocus:_=>g(i,_.currentTarget),onPointerEnter:_=>g(i,_.currentTarget),onPointerLeave:_=>D(_.currentTarget)}),P=()=>{d(void 0),y("")},b=async i=>{const _=m.trim();_&&await t.update({title:_},i)&&P()},h=async i=>{await t.remove(i)&&f(void 0)};return c.useEffect(()=>{const i=_=>{const C=_.target;C instanceof Node&&(E.current?.contains(C)||r.current?.contains(C)||s())};return document.addEventListener("pointerdown",i),()=>{document.removeEventListener("pointerdown",i)}},[s,r]),a.jsxs("div",{"aria-label":"任务列表",className:"make-ai-assistant__conversation-controls",id:e,ref:E,role:"dialog",children:[a.jsxs("div",{className:"make-ai-assistant__conversation-heading",children:[a.jsx("span",{children:"最近对话"}),a.jsx("button",{"aria-label":"刷新任务列表",className:"make-ai-assistant__conversation-refresh",disabled:t.busy,type:"button",...R("刷新"),onClick:()=>{t.refresh()},children:a.jsx(dt,{"aria-hidden":"true",className:"make-ai-assistant__conversation-refresh-icon"})})]}),a.jsxs("nav",{"aria-label":"对话列表",className:"make-ai-assistant__conversation-list",children:[t.chats.map(i=>{const _=l===i.chatId,C=v===i.chatId,B=i.title||"未命名对话";return a.jsxs("div",{className:"make-ai-assistant__conversation-row","data-active":t.chat?.chatId===i.chatId||void 0,"data-editing":_||C||void 0,children:[C?a.jsxs("div",{"aria-label":"确认删除对话",className:"make-ai-assistant__conversation-delete-confirmation",role:"group",children:[a.jsx(ms,{"aria-hidden":"true",className:"make-ai-assistant__conversation-delete-confirmation-icon"}),a.jsxs("span",{className:"make-ai-assistant__conversation-delete-confirmation-message",children:["确认删除“",B,"”?"]}),a.jsx("button",{"aria-label":`确认删除:${B}`,className:"make-ai-assistant__conversation-row-action make-ai-assistant__conversation-row-action--danger make-ai-assistant__conversation-delete-confirmation-confirm",disabled:t.busy||!t.canEdit,type:"button",...R("确认删除"),onClick:()=>{h(i)},children:a.jsx($t,{"aria-hidden":"true",className:"make-ai-assistant__conversation-row-action-icon"})}),a.jsx("button",{"aria-label":`取消删除:${B}`,className:"make-ai-assistant__conversation-row-action make-ai-assistant__conversation-delete-confirmation-cancel",disabled:t.busy,type:"button",...R("取消"),onClick:()=>f(void 0),children:a.jsx(Ze,{"aria-hidden":"true",className:"make-ai-assistant__conversation-row-action-icon"})})]}):_?a.jsx("input",{"aria-label":"对话标题",autoFocus:!0,className:"make-ai-assistant__conversation-row-title-input",disabled:t.busy,maxLength:255,value:m,onChange:I=>y(I.currentTarget.value),onKeyDown:I=>{I.nativeEvent.isComposing||(I.key==="Escape"&&(I.preventDefault(),P()),I.key==="Enter"&&(I.preventDefault(),b(i)))}}):a.jsxs("button",{"aria-pressed":t.chat?.chatId===i.chatId,className:"make-ai-assistant__conversation-row-select",type:"button",onClick:()=>{s(),t.select(i)},children:[a.jsx(ns,{"aria-hidden":"true"}),a.jsx("span",{children:B})]}),_?a.jsxs("div",{"aria-label":"修改标题操作",className:"make-ai-assistant__conversation-row-actions",role:"group",children:[a.jsx("button",{"aria-label":"确认修改标题",className:"make-ai-assistant__conversation-row-action",disabled:t.busy||!m.trim(),type:"button",...R("保存标题"),onClick:()=>{b(i)},children:a.jsx(Za,{"aria-hidden":"true",className:"make-ai-assistant__conversation-row-action-icon"})}),a.jsx("button",{"aria-label":"取消修改标题",className:"make-ai-assistant__conversation-row-action",disabled:t.busy,type:"button",...R("取消"),onClick:P,children:a.jsx(Ze,{"aria-hidden":"true",className:"make-ai-assistant__conversation-row-action-icon"})})]}):C?null:a.jsxs("div",{className:"make-ai-assistant__conversation-row-actions",children:[a.jsx("button",{"aria-label":`${i.pinned?"取消置顶":"置顶"} ${B}`,"aria-pressed":i.pinned,className:"make-ai-assistant__conversation-row-action make-ai-assistant__conversation-row-pin",disabled:t.busy||!t.canEdit,type:"button",...R(i.pinned?"取消置顶":"置顶"),onClick:()=>{t.update({pinned:!i.pinned},i)},children:a.jsx(cs,{"aria-hidden":"true",className:"make-ai-assistant__conversation-row-action-icon"})}),a.jsx("button",{"aria-label":`修改标题:${B}`,className:"make-ai-assistant__conversation-row-action",disabled:t.busy||!t.canEdit,type:"button",...R("修改标题"),onClick:()=>{f(void 0),d(i.chatId),y(i.title)},children:a.jsx(os,{"aria-hidden":"true",className:"make-ai-assistant__conversation-row-action-icon"})}),a.jsx("button",{"aria-label":`删除:${B}`,className:"make-ai-assistant__conversation-row-action make-ai-assistant__conversation-row-action--danger",disabled:t.busy,type:"button",...R("删除"),onClick:()=>{P(),f(i.chatId)},children:a.jsx($t,{"aria-hidden":"true",className:"make-ai-assistant__conversation-row-action-icon"})})]})]},i.chatId)}),!t.loading&&!t.chats.length?a.jsx("p",{children:"暂无对话,发送消息即可新建"}):null,t.listCursor?a.jsx("button",{className:"make-ai-assistant__conversation-more",type:"button",onClick:()=>{t.refresh(t.listCursor)},children:"更多对话"}):null]}),t.chat&&(t.historyMore||t.historyTruncated||t.state.historyTruncated)?a.jsxs("div",{className:"make-ai-assistant__conversation-history-actions",children:[t.historyMore?a.jsx("button",{type:"button",disabled:t.loading,onClick:()=>{t.moreHistory()},children:"继续加载历史"}):null,t.historyTruncated||t.state.historyTruncated?a.jsx("p",{children:"当前展示有界消息窗口,可重新选择对话从头读取。"}):null]}):null,t.error?a.jsxs("div",{className:"make-ai-assistant__conversation-error",role:"alert",children:[a.jsx("span",{children:t.error}),a.jsx("button",{type:"button",onClick:()=>{t.retry()},children:"恢复对话"})]}):null,n?a.jsxs("button",{className:"make-ai-assistant__conversation-new",type:"button",onClick:n,children:[a.jsx(_t,{"aria-hidden":"true",className:"make-ai-assistant__conversation-new-icon"}),a.jsx("span",{children:"新建对话"})]}):null,A?a.jsx(ps,{anchor:A.anchor,label:A.label,onDismiss:()=>N(void 0)}):null]})}function ys({message:e,manager:t}){const[s,n]=c.useState(!1),[r,l]=c.useState(""),[d,m]=c.useState(""),y=t.feedbackBusy.includes(e.id);if(!e.persistent||e.role!=="assistant"||e.intermediate)return null;const v=e.feedback?.rating??"none";return a.jsxs("div",{"aria-label":"回答反馈",className:"make-ai-assistant__feedback",role:"group",children:[a.jsx("button",{type:"button","aria-label":"喜欢","aria-pressed":v==="like",className:"make-ai-assistant__reply-action make-ai-assistant__reply-feedback-action","data-tooltip":"喜欢",disabled:y,onClick:()=>{t.feedback(e,v==="like"?"none":"like")},children:a.jsx(us,{"aria-hidden":"true",className:"make-ai-assistant__reply-feedback-icon"})}),a.jsx("button",{type:"button","aria-label":"不喜欢","aria-pressed":v==="dislike",className:"make-ai-assistant__reply-action make-ai-assistant__reply-feedback-action","data-tooltip":"不喜欢",disabled:y,onClick:()=>{if(v==="dislike"){t.feedback(e,"none");return}l(e.feedback?.reason??""),m(e.feedback?.comment??""),n(!0)},children:a.jsx(ds,{"aria-hidden":"true",className:"make-ai-assistant__reply-feedback-icon"})}),v==="dislike"?a.jsx("button",{className:"make-ai-assistant__feedback-text-action",type:"button",disabled:y,onClick:()=>{l(e.feedback?.reason??""),m(e.feedback?.comment??""),n(!0)},children:"修改反馈"}):null,s?a.jsxs("form",{onSubmit:f=>{f.preventDefault(),t.feedback(e,"dislike",r,d).then(A=>{A&&n(!1)})},children:[a.jsx("input",{"aria-label":"反馈原因",maxLength:128,value:r,onChange:f=>l(f.currentTarget.value),placeholder:"原因(可选)"}),a.jsx("textarea",{"aria-label":"反馈说明",maxLength:4e3,value:d,onChange:f=>m(f.currentTarget.value),placeholder:"补充说明(可选)"}),a.jsx("button",{className:"make-ai-assistant__feedback-text-action",type:"submit",disabled:y,children:"提交反馈"}),a.jsx("button",{className:"make-ai-assistant__feedback-text-action",type:"button",onClick:()=>n(!1),children:"取消"})]}):null]})}const zt=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 gs({part:e,context:t,transport:s,chatId:n}){const[r,l]=c.useState(),[d,m]=c.useState(),[y,v]=c.useState(!1),f=c.useRef([]),A=c.useRef(void 0);c.useEffect(()=>()=>{A.current?.abort(),f.current.forEach(E=>URL.revokeObjectURL(E))},[]);const N=async E=>{if(!s.readContent||y)return;const g=new AbortController;A.current=g,v(!0),m(void 0);try{const D=await s.readContent(t,{chatId:n,contentRef:e.media.contentRef},{signal:g.signal});if(g.signal.aborted)return;const R=new Blob([new Uint8Array(D).buffer],{type:E&&zt.has(e.media.contentType)?e.media.contentType:"application/octet-stream"}),P=URL.createObjectURL(R);if(f.current.push(P),E)l(P);else{const b=document.createElement("a");b.href=P,b.download=e.name??"attachment",b.click()}}catch(D){g.signal.aborted||m(bt(D))}finally{g.signal.aborted||v(!1)}};return a.jsxs("div",{className:"make-ai-assistant__attachment",children:[a.jsxs("span",{children:[e.name??"附件"," · ",e.media.sizeBytes," 字节"]}),s.readContent?a.jsxs(a.Fragment,{children:[a.jsx("button",{type:"button",disabled:y,onClick:()=>{N(!1)},children:"下载附件"}),zt.has(e.media.contentType)?a.jsx("button",{type:"button",disabled:y,onClick:()=>{N(!0)},children:"预览附件"}):null]}):null,d?a.jsx("span",{role:"alert",children:d}):null,r&&e.kind==="image"?a.jsx("img",{src:r,alt:e.name??"附件图片"}):null,r&&e.kind==="audio"?a.jsx("audio",{src:r,controls:!0}):null,r&&e.kind==="video"?a.jsx("video",{src:r,controls:!0}):null]})}function ks({message:e,context:t,transport:s,chatId:n}){return a.jsx(a.Fragment,{children:e.parts?.map((r,l)=>r.kind==="text"?null:r.kind==="unknown"?a.jsx("span",{className:"make-ai-assistant__attachment",children:r.textFallback??"此内容类型暂不支持展示"},r.id??`${e.id}:${l}`):a.jsx(gs,{part:r,context:t,transport:s,chatId:n},r.id??`${e.id}:${l}`))})}const Dt=e=>{switch(e.status){case"ready":return"已上传";case"completing":return"校验中";case"paused":return"已暂停";case"failed":return"上传失败";default:return`${Math.round(e.progress*100)}%`}},_s=(e,t)=>{switch(e.status){case"uploading":case"queued":return t;case"completing":return"校验";case"paused":return"暂停";case"failed":return"失败";case"ready":return}},ja=e=>e.type.split(";")[0].trim().toLowerCase()||"application/octet-stream",bs=e=>e.startsWith("image/")&&e!=="image/svg+xml"?"image":e.startsWith("audio/")?"audio":e.startsWith("video/")?"video":"file",xs=e=>{const t=ja(e);if(!(!t.startsWith("image/")||t==="image/svg+xml"||typeof URL>"u"||typeof URL.createObjectURL!="function"))return URL.createObjectURL(e)},Ot=e=>{e&&typeof URL<"u"&&typeof URL.revokeObjectURL=="function"&&URL.revokeObjectURL(e)},js=(e,t)=>new Promise((s,n)=>{const r=new FileReader,l=()=>t.removeEventListener("abort",d),d=()=>{r.abort(),l(),n(Object.assign(new Error("Read aborted"),{name:"AbortError"}))};if(t.aborted){d();return}t.addEventListener("abort",d,{once:!0}),r.onload=()=>{l(),s(new Uint8Array(r.result))},r.onerror=()=>{l(),n(new Error("无法读取文件"))},r.readAsArrayBuffer(e)});function ws(e,t,s){const[n,r]=c.useState([]),l=c.useRef(new Map),d=c.useRef(Promise.resolve()),m=t.scopeKey?.(e)??e.app.id,y=c.useRef(m);y.current=m;const v=c.useRef(void 0),f=s.enabled&&t.features?.attachments===!0,A=(h,i)=>{!l.current.has(h.draft.id)||h.scope!==y.current||(h.draft={...h.draft,...i},r([...l.current.values()].map(_=>_.draft)))},N=()=>{for(const h of l.current.values())h.controller.abort(),Ot(h.draft.previewUrl);l.current.clear(),r([]),v.current=void 0,d.current=Promise.resolve()};c.useEffect(()=>(N(),N),[m,t]),c.useEffect(()=>{v.current&&s.chat?.chatId!==v.current&&N()},[s.chat?.chatId]);const E=async h=>{const i=h.controller.signal,_=()=>{if(i.aborted||h.scope!==y.current||!l.current.has(h.draft.id))throw Object.assign(new Error("Upload aborted"),{name:"AbortError"})};try{if(_(),h.file.size>64<<20)throw new Error("文件不能超过 64 MiB");const C=await s.ensureChat();_(),v.current=C.chatId;const B=ja(h.file);A(h,{status:"uploading",error:void 0});let I=h.draft.upload?await t.getUpload(e,{chatId:C.chatId,uploadId:h.draft.upload.id},{signal:i}):await t.startUpload(e,{chatId:C.chatId,fileId:h.draft.fileId,name:h.file.name,contentType:B,sizeBytes:h.file.size},{signal:i});if(_(),A(h,{upload:I}),I.name!==h.file.name||I.contentType!==B||I.sizeBytes!==h.file.size)throw new Error("上传文件身份不一致");if(I.status!=="ready"){if(I=await t.getUpload(e,{chatId:C.chatId,uploadId:I.id},{signal:i}),_(),I.status!=="uploading"||!Number.isSafeInteger(I.partSize)||I.partSize<=0||I.partSize>1<<20)throw new Error("当前上传状态无法继续,请重新选择文件");const W=new Set(I.completedParts),Y=Math.ceil(h.file.size/I.partSize);for(let se=0;se<Y;se+=1){if(_(),!W.has(se)){const G=await js(h.file.slice(se*I.partSize,Math.min(h.file.size,(se+1)*I.partSize)),i);_(),await t.uploadPart(e,{chatId:C.chatId,uploadId:I.id,part:se,bytes:G},{signal:i}),_(),W.add(se)}A(h,{progress:W.size/Math.max(Y,1)})}A(h,{status:"completing"}),I=await t.completeUpload(e,{chatId:C.chatId,uploadId:I.id},{signal:i}),_()}if(I.status!=="ready"||!I.content)throw new Error("上传尚未完成");A(h,{status:"ready",progress:1,upload:I})}catch(C){A(h,{status:i.aborted?"paused":"failed",error:i.aborted?void 0:bt(C)})}},g=h=>{if(f){if(h.length+l.current.size>32){s.setError("每条消息最多包含 32 个附件或文本片段");return}for(const i of h){const _={id:ze(),fileId:ze(),name:i.name,size:i.size,status:"queued",progress:0,previewUrl:xs(i)},C={draft:_,file:i,controller:new AbortController,scope:m};l.current.set(_.id,C),d.current=d.current.then(()=>E(C))}r([...l.current.values()].map(i=>i.draft))}},D=h=>{const i=l.current.get(h);!i||!["paused","failed"].includes(i.draft.status)||(i.controller=new AbortController,A(i,{status:"queued"}),d.current=d.current.then(()=>E(i)))},R=h=>{const i=l.current.get(h);i?.controller.abort(),Ot(i?.draft.previewUrl),l.current.delete(h),r([...l.current.values()].map(_=>_.draft))},P=h=>l.current.get(h)?.controller.abort(),b=n.flatMap(h=>{const i=h.upload;if(h.status!=="ready"||!i?.content)return[];const _=bs(i.contentType);return[{id:h.id,kind:_,name:i.name,media:{contentRef:i.content.contentRef,contentType:i.contentType,sizeBytes:i.content.sizeBytes,digestSha256:i.content.digestSha256}}]});return{enabled:f,drafts:n,parts:b,pending:n.some(h=>h.status!=="ready"),add:g,retry:D,remove:R,pause:P,clear:N}}function Is({attachments:e,onOpenChange:t,open:s,triggerRef:n}){const r=c.useRef(null),l=c.useRef(null);c.useEffect(()=>{if(!s)return;const m=y=>{const v=y.target;v instanceof Node&&!r.current?.contains(v)&&t(!1)};return document.addEventListener("pointerdown",m),()=>{document.removeEventListener("pointerdown",m)}},[t,s]);const d=m=>{e.add(Array.from(m.files??[])),m.value="",t(!1)};return a.jsxs("div",{className:"make-ai-assistant__attachment-composer",ref:r,children:[a.jsx("button",{"aria-expanded":s,"aria-haspopup":"menu","aria-label":"添加附件",className:"make-ai-assistant__attachment-trigger",ref:n,title:"添加附件",type:"button",onClick:()=>t(!s),children:a.jsx(_t,{"aria-hidden":"true",className:"make-ai-assistant__attachment-trigger-icon"})}),s?a.jsx("div",{"aria-label":"附件选项",className:"make-ai-assistant__attachment-menu",role:"menu",children:a.jsxs("button",{role:"menuitem",type:"button",onClick:()=>l.current?.click(),children:[a.jsx(hs,{"aria-hidden":"true"}),a.jsx("span",{children:"上传文件或图片"})]})}):null,a.jsx("input",{"aria-label":"上传文件或图片",hidden:!0,multiple:!0,ref:l,type:"file",onChange:m=>d(m.currentTarget)})]})}function As({attachments:e,visible:t}){const[s,n]=c.useState(),r=e.drafts.find(f=>f.id===s),l=!!r,d=c.useRef(null),m=c.useRef(null),y=c.useCallback(()=>{n(void 0),m.current?.focus()},[]);if(c.useEffect(()=>{if(!l)return;const f=A=>{A.key==="Escape"&&(A.preventDefault(),A.stopImmediatePropagation(),y())};return document.addEventListener("keydown",f,!0),()=>document.removeEventListener("keydown",f,!0)},[y,l]),c.useEffect(()=>{t||n(void 0)},[t]),!e.drafts.length)return null;const v=typeof document>"u"?void 0:d.current?.closest(".make-ai-assistant")??document.body;return a.jsxs("div",{"aria-label":"待发送附件",className:"make-ai-assistant__attachment-drafts",ref:d,children:[a.jsx("ul",{children:e.drafts.map(f=>{const A=Dt(f),N=_s(f,A);return a.jsxs("li",{"aria-label":`${f.name},${A}`,"data-status":f.status,children:[f.previewUrl?a.jsx("button",{"aria-label":`预览附件 ${f.name}`,className:"make-ai-assistant__attachment-draft-preview-button",type:"button",onClick:E=>{m.current=E.currentTarget,n(f.id)},children:a.jsx("img",{alt:"",className:"make-ai-assistant__attachment-draft-preview",src:f.previewUrl})}):a.jsx("button",{"aria-label":`查看附件详情 ${f.name}`,className:"make-ai-assistant__attachment-draft-file",type:"button",onClick:E=>{m.current=E.currentTarget,n(f.id)},children:a.jsx(Tt,{"aria-hidden":"true"})}),N?a.jsx("span",{"aria-hidden":"true",className:"make-ai-assistant__attachment-draft-status",children:N}):null,f.error?a.jsx("span",{className:"make-ai-assistant__attachment-draft-error",role:"alert",children:f.error}):null,f.status==="failed"||f.status==="paused"?a.jsx("button",{"aria-label":`重试上传 ${f.name}`,className:"make-ai-assistant__attachment-draft-control",title:"重试上传",type:"button",onClick:()=>e.retry(f.id),children:a.jsx(ls,{"aria-hidden":"true"})}):null,f.status==="uploading"?a.jsx("button",{"aria-label":`暂停上传 ${f.name}`,className:"make-ai-assistant__attachment-draft-control",title:"暂停上传",type:"button",onClick:()=>e.pause(f.id),children:a.jsx(is,{"aria-hidden":"true"})}):null,a.jsx("button",{"aria-label":`移除附件 ${f.name}`,className:"make-ai-assistant__attachment-draft-remove",type:"button",onClick:()=>{s===f.id&&y(),e.remove(f.id)},children:a.jsx(Ze,{"aria-hidden":"true",className:"make-ai-assistant__attachment-draft-remove-icon"})})]},f.id)})}),r&&v?Ht.createPortal(a.jsx("div",{className:"make-ai-assistant__attachment-preview-backdrop",onPointerDown:f=>{f.target===f.currentTarget&&y()},children:a.jsxs("div",{"aria-label":`${r.previewUrl?"预览附件":"附件详情"} ${r.name}`,"aria-modal":"true",className:"make-ai-assistant__attachment-preview-dialog","data-kind":r.previewUrl?"image":"file",role:"dialog",onKeyDown:f=>{f.key==="Tab"&&f.preventDefault()},children:[a.jsx("button",{"aria-label":`${r.previewUrl?"关闭图片预览":"关闭附件详情"} ${r.name}`,autoFocus:!0,className:"make-ai-assistant__attachment-preview-close",type:"button",onClick:y,children:a.jsx(Ze,{"aria-hidden":"true",className:"make-ai-assistant__attachment-preview-close-icon"})}),r.previewUrl?a.jsx("img",{alt:r.name,src:r.previewUrl}):a.jsx("div",{"aria-hidden":"true",className:"make-ai-assistant__attachment-preview-file",children:a.jsx(Tt,{})}),a.jsxs("div",{className:"make-ai-assistant__attachment-preview-details",children:[a.jsx("strong",{children:r.name}),a.jsx("span",{children:Dt(r)}),r.error?a.jsx("p",{children:r.error}):null]})]})}),v):null]})}const Ns=e=>`${e}-${Date.now()}-${Math.random().toString(36).slice(2,9)}`,Cs="Make",Ss=["总结当前页面数据","找出需要关注的记录","列出我有权限查看的数据对象"],Ms=48,Es=160,wa=(e,t)=>t??`${e?.trim()||Cs} AI 助手`,Ts=e=>e??Ss,Rs=e=>typeof e=="number"&&Number.isFinite(e)&&e>0?e:void 0,$s=e=>typeof e=="number"?Number.isFinite(e)?`${e}px`:void 0:e?.trim()||void 0;class Z extends Error{}const ct=(e,t)=>{if(!(typeof e!="object"||e===null))return e[t]},Ls=e=>{const t=ct(e,"status");return typeof t=="number"?t:ct(ct(e,"response"),"status")},zs=e=>{const t=ct(e,"code"),s=Ls(e),n=e instanceof Error?e.message:"",r=[t,n].filter(y=>typeof y=="string").join(" ").toLowerCase(),d=globalThis.navigator?.onLine===!1||/network|fetch|timeout|offline|connection|网络|连接|超时/.test(r),m=typeof s=="number"&&s>=500||/server|service|服务器|服务异常/.test(r);return d?{actionLabel:"重新连接",description:"请检查网络后再试。",kind:"network",label:"网络连接",title:"网络连接不可用"}:m?{actionLabel:"重新加载",description:"服务暂时未能响应,请稍后重试。",kind:"service",label:"服务异常",title:"服务暂时不可用"}:{actionLabel:"重新加载",description:"请稍后重试;若问题持续出现,请联系管理员。",kind:"unknown",label:"加载异常",title:"暂时无法加载对话"}},Pt=e=>{try{const t=e?.return?.();if(!t)return;Promise.resolve(t).catch(s=>{console.error("[make-ai-assistant] transport iterator close failed",{errorType:s instanceof Error?s.name:typeof s})})}catch(t){console.error("[make-ai-assistant] transport iterator close failed",{errorType:t instanceof Error?t.name:typeof t})}},Ds=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 t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.style.position="fixed",t.style.inset="0 auto auto 0",t.style.opacity="0",document.body.append(t),t.select();const s=document.execCommand("copy");if(t.remove(),!s)throw new Error("Clipboard copy failed")},lt=({className:e=""})=>a.jsx("span",{className:`make-ai-assistant__avatar ${e}`.trim(),"aria-hidden":"true",children:a.jsx(va,{"aria-hidden":"true"})}),Os=({src:e})=>e?a.jsx("span",{className:"make-ai-assistant__user-avatar","aria-hidden":"true",children:a.jsx("img",{alt:"",src:e})}):null,Ps=({userAvatarUrl:e,userName:t})=>{const s=t?.trim();return!s&&!e?null:a.jsxs("div",{className:"make-ai-assistant__message-identity",children:[s?a.jsx("span",{className:"make-ai-assistant__message-sender",children:s}):null,a.jsx(Os,{src:e})]})},vt=e=>{const t=e.trim();if(!(!t.startsWith("|")||!t.endsWith("|")))return t.slice(1,-1).split("|").map(s=>s.trim())},Us=e=>e.length>0&&e.every(t=>/^:?-{3,}:?$/.test(t)),Fs=(e,t)=>{const s=vt(e[t]??""),n=vt(e[t+1]??"");if(!s||!n||s.length!==n.length||!Us(n))return;const r=[];let l=t+2;for(;l<e.length;){const d=vt(e[l]??"");if(!d||d.length!==s.length)break;r.push(d),l+=1}return{headers:s,lastIndex:l-1,rows:r}},qs=e=>{const t=[],s=[],n=[],r=[],l=e.replace(/\r\n?/g,`
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),l=require("react"),we=require("./index.cjs"),I=require("./conversation-BpmWa2VL.cjs"),ht=require("./conversation-management-f1y0yRvt.cjs"),Ht=require("react-dom"),Kt=e=>e?.trim()||void 0,ye=(e,t)=>Kt(e)??t,kt=e=>{const t=Kt(e?.primary);if(t)return{"--make-ai-theme-primary":t,"--make-ai-theme-primary-hover":ye(e?.primaryHover,"color-mix(in srgb, var(--make-ai-theme-primary) 84%, #15233d)"),"--make-ai-theme-on-primary":ye(e?.onPrimary,"#fcfcff"),"--make-ai-theme-bg":ye(e?.background,"color-mix(in srgb, var(--make-ai-theme-primary) 2%, #fcfcff)"),"--make-ai-theme-surface":ye(e?.surface,"color-mix(in srgb, var(--make-ai-theme-primary) 4%, var(--make-ai-theme-bg))"),"--make-ai-theme-surface-strong":ye(e?.surfaceStrong,"color-mix(in srgb, var(--make-ai-theme-primary) 8%, var(--make-ai-theme-bg))"),"--make-ai-theme-text":ye(e?.text,"color-mix(in srgb, var(--make-ai-theme-primary) 12%, #252631)"),"--make-ai-theme-text-secondary":ye(e?.textSecondary,"color-mix(in srgb, var(--make-ai-theme-text) 74%, var(--make-ai-theme-primary))"),"--make-ai-theme-border":ye(e?.border,"color-mix(in srgb, var(--make-ai-theme-primary) 14%, var(--make-ai-theme-bg))"),"--make-ai-theme-overlay":ye(e?.overlay,"color-mix(in srgb, var(--make-ai-theme-text) 88%, var(--make-ai-theme-primary))"),"--make-ai-theme-on-overlay":ye(e?.onOverlay,"#fcfcff")}},Et=(e,t)=>!t||!l.isValidElement(e)||typeof e.type!="string"?e:l.cloneElement(e,{style:{...e.props.style,...t}});function Vt({artifact:e,context:t,fallback:s,onAction:n,onActionError:i,registry:o,theme:u}){const h=kt(u),v=we.resolveArtifactTemplate(o,e,t);if(!v){const w=s?s(e):a.jsxs("section",{className:"make-ai-artifact make-ai-artifact--unsupported",role:"status",children:[a.jsx("strong",{children:"暂不支持展示此结果"}),a.jsxs("span",{children:["结果类型:",e.kind]})]});return Et(w,h)}const j={context:t,onAction:n,onActionError:i,theme:u,themeStyle:h},f=v.template.render(e,t,j);return Et(f,h)}const je=(e,t,s)=>{if(e==null||e==="")return"—";if(typeof e=="boolean")return e?"是":"否";if(typeof e!="number")return`${e}${t?.unit??""}`;const n=t?.precision,i={maximumFractionDigits:n??2,minimumFractionDigits:n};t?.style==="currency"&&t.currency?(i.style="currency",i.currency=t.currency):t?.style==="percent"&&(i.style="percent");try{const o=t?.style==="percent"?e/100:e;return`${new Intl.NumberFormat(s,i).format(o)}${t?.unit??""}`}catch{return`${e}${t?.unit??""}`}},Bt=e=>{let t=Number.POSITIVE_INFINITY,s=Number.NEGATIVE_INFINITY;for(const n of e)t=Math.min(t,n),s=Math.max(s,n);return Number.isFinite(t)&&Number.isFinite(s)?{min:t,max:s}:{min:0,max:0}},Wt=(e,t,s)=>{if(!s.onAction)return;const n=o=>{console.error("[make-ai-assistant] host action error handler failed",{actionId:e.id,artifactId:t.artifact.id,errorType:o instanceof Error?o.name:typeof o,intent:e.intent})},i=o=>{if(s.onActionError){try{Promise.resolve(s.onActionError(o,e,t)).catch(n)}catch(u){n(u)}return}console.error("[make-ai-assistant] host action failed",{actionId:e.id,artifactId:t.artifact.id,errorType:o instanceof Error?o.name:typeof o,intent:e.intent})};try{Promise.resolve(s.onAction(e,t)).catch(i)}catch(o){i(o)}},Oe=(e,t)=>e.actions?.length&&t.onAction?a.jsx("div",{className:"make-ai-artifact__actions",children:e.actions.map(s=>a.jsxs("button",{className:`make-ai-artifact__action make-ai-artifact__action--${s.appearance??"link"}`,type:"button",onClick:()=>Wt(s,{artifact:e,context:t.context},t),children:[s.label,a.jsx("span",{"aria-hidden":"true",children:"→"})]},s.id))}):null,Ue=(e,t,s="",n)=>a.jsxs("section",{"aria-label":e.title??`${e.kind} result`,className:`make-ai-artifact ${s}`.trim(),"data-artifact-density":e.presentation?.density,"data-artifact-kind":e.kind,style:n,children:[e.title?a.jsx("h4",{className:"make-ai-artifact__title",children:e.title}):null,e.summary?a.jsx("p",{className:"make-ai-artifact__summary",children:e.summary}):null,t]}),Ta=({artifact:e,renderContext:t})=>{const s=e.data.delta,n=s?je(s.value,s.format==="percent"?{style:"percent"}:void 0,t.context.locale):void 0;return Ue(e,a.jsxs(a.Fragment,{children:[a.jsx("div",{className:"make-ai-artifact__metric-value",children:je(e.data.value,e.data.format,t.context.locale)}),s?a.jsxs("div",{className:`make-ai-artifact__delta make-ai-artifact__delta--${s.direction??"flat"}`,children:[a.jsx("span",{"aria-hidden":"true",children:s.direction==="up"?"↗":s.direction==="down"?"↘":"→"}),a.jsx("span",{children:n}),s.label?a.jsx("span",{children:s.label}):null]}):null,e.data.context?a.jsx("p",{className:"make-ai-artifact__context",children:e.data.context}):null,Oe(e,t)]}),"make-ai-artifact--metric",t.themeStyle)},Ra=({artifact:e,renderContext:t})=>Ue(e,a.jsxs(a.Fragment,{children:[a.jsx("div",{className:"make-ai-artifact__comparison",children:e.data.items.map(s=>a.jsxs("div",{className:"make-ai-artifact__comparison-item",children:[a.jsx("span",{children:s.label}),a.jsx("strong",{children:je(s.value,s.format,t.context.locale)}),s.hint?a.jsx("small",{children:s.hint}):null]},s.id))}),Oe(e,t)]}),"make-ai-artifact--comparison",t.themeStyle),$a=({artifact:e,renderContext:t})=>{const s=e.data.series.flatMap(u=>u.points.map(h=>h.y)),{max:n,min:i}=Bt(s),o=n-i||1;return Ue(e,a.jsxs(a.Fragment,{children:[a.jsx("div",{className:"make-ai-artifact__trend",children:e.data.series.map(u=>a.jsxs("div",{className:"make-ai-artifact__trend-series",children:[a.jsx("div",{className:"make-ai-artifact__trend-label",children:u.label}),a.jsx("div",{className:"make-ai-artifact__trend-bars",children:u.points.map((h,v)=>{const j=18+(h.y-i)/o*70;return a.jsxs("div",{className:"make-ai-artifact__trend-point",children:[a.jsx("span",{"aria-label":`${h.x}: ${je(h.y,u.format,t.context.locale)}`,className:"make-ai-artifact__trend-bar",role:"img",style:{height:`${j}%`},title:`${h.x}: ${je(h.y,u.format,t.context.locale)}`}),a.jsx("small",{children:h.x})]},`${h.x}-${v}`)})})]},u.id))}),Oe(e,t)]}),"make-ai-artifact--trend",t.themeStyle)},La=({artifact:e,renderContext:t})=>{const{max:s}=Bt(e.data.items.map(i=>Math.abs(i.value))),n=Math.max(s,1);return Ue(e,a.jsxs(a.Fragment,{children:[a.jsx("ol",{className:"make-ai-artifact__ranking",children:e.data.items.map((i,o)=>a.jsxs("li",{children:[a.jsx("span",{className:"make-ai-artifact__rank",children:o+1}),a.jsxs("span",{className:"make-ai-artifact__ranking-label",children:[a.jsx("span",{children:i.label}),i.description?a.jsx("small",{children:i.description}):null]}),a.jsx("span",{className:"make-ai-artifact__ranking-track","aria-hidden":"true",children:a.jsx("span",{style:{width:`${Math.abs(i.value)/n*100}%`}})}),a.jsx("strong",{children:je(i.value,i.format,t.context.locale)})]},i.id))}),Oe(e,t)]}),"make-ai-artifact--ranking",t.themeStyle)},za=(e,t)=>t.action??{id:`open-${t.id}`,label:t.title??t.id,intent:"open-record",target:{entityKey:e.data.entity.key,recordId:t.id}},Da=({artifact:e,renderContext:t})=>Ue(e,a.jsxs(a.Fragment,{children:[a.jsx("div",{className:"make-ai-artifact__record-list",children:e.data.records.length===0?a.jsx("p",{className:"make-ai-artifact__empty",children:"没有符合条件的记录"}):e.data.records.map(s=>{const n=za(e,s),i=a.jsxs(a.Fragment,{children:[a.jsx("strong",{children:s.title??s.id}),a.jsx("span",{className:"make-ai-artifact__record-values",children:e.data.columns.map(o=>a.jsxs("span",{children:[a.jsx("small",{children:o.label}),je(s.values[o.key],o.format,t.context.locale)]},o.key))}),t.onAction?a.jsx("span",{"aria-hidden":"true",children:"›"}):null]});return t.onAction?a.jsx("button",{className:"make-ai-artifact__record",type:"button",onClick:()=>Wt(n,{artifact:e,context:t.context},t),children:i},s.id):a.jsx("div",{className:"make-ai-artifact__record",children:i},s.id)})}),e.data.total!==void 0?a.jsxs("p",{className:"make-ai-artifact__record-total",children:["共 ",e.data.total," 条"]}):null,Oe(e,t)]}),"make-ai-artifact--record-list",t.themeStyle),Pa=({artifact:e,renderContext:t})=>Ue(e,a.jsxs(a.Fragment,{children:[a.jsxs("div",{className:`make-ai-artifact__notice make-ai-artifact__notice--${e.data.tone}`,children:[a.jsx("span",{"aria-hidden":"true",children:e.data.tone==="success"?"✓":e.data.tone==="warning"?"!":e.data.tone==="danger"?"×":"i"}),a.jsx("p",{children:e.data.body})]}),Oe(e,t)]}),"make-ai-artifact--notice",t.themeStyle),De=(e,t,s)=>({id:e,kinds:[t],priority:0,render:s}),Oa=[De("platform.metric.default","metric",(e,t,s)=>a.jsx(Ta,{artifact:e,renderContext:s})),De("platform.comparison.default","comparison",(e,t,s)=>a.jsx(Ra,{artifact:e,renderContext:s})),De("platform.trend.default","trend",(e,t,s)=>a.jsx($a,{artifact:e,renderContext:s})),De("platform.ranking.default","ranking",(e,t,s)=>a.jsx(La,{artifact:e,renderContext:s})),De("platform.record-list.default","record-list",(e,t,s)=>a.jsx(Da,{artifact:e,renderContext:s})),De("platform.notice.default","notice",(e,t,s)=>a.jsx(Pa,{artifact:e,renderContext:s}))],Xt=we.createArtifactTemplateRegistry(Oa).templates,Gt=(e=Xt)=>we.createArtifactTemplateRegistry(e);const Ua=e=>e?.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();function Fa(e,t,s=[]){if(t==null)throw new Error("[lucide]: iconNode is required when icon name is used");return{name:Ua(e),size:24,node:t,...s.length>0?{aliases:s}:{}}}const qa=e=>{let t="",s=!1;for(const n of e){if(n==="-"||n==="_"||n<=" "){s=t.length>0;continue}t.length===0?t+=n.toLowerCase():t+=s?n.toUpperCase():n,s=!1}return t};const Ha=e=>{const t=qa(e);return t.charAt(0).toUpperCase()+t.slice(1)};const gt=(...e)=>e.filter((t,s,n)=>!!t&&t.trim()!==""&&n.indexOf(t)===s).join(" ").trim();const Se={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};function ft(e){return e!=null}function Ka(e,t={}){const s=t.attributeNames??{},n=N=>s[N]??N,i=e.size??e.width??Se.width,o=e.size??e.height??Se.height,u=e.aliases?.filter(N=>typeof N=="string"&&N.trim()!=="").map(N=>`lucide-${N}`)??[],h=[...e.name?[`lucide-${e.name}`]:[],...u],v=t.className?.split(" ").filter(Boolean)??[],j=t.includeDefaultClasses===!1?gt(...v):gt("lucide",...h,...v),f=t.absoluteStrokeWidth?Number(t.strokeWidth??Se["stroke-width"])*Number(e.size??e.width??Se.width)/Number(t.size??t.width??Se.width):t.strokeWidth??Se["stroke-width"];return["svg",{...Object.entries(Se).reduce((N,[A,g])=>(N[n(A)]=g,N),{}),..."color"in t&&t.color&&{[n("stroke")]:t.color},..."size"in t&&ft(t.size)&&{[n("width")]:t.size,[n("height")]:t.size},..."width"in t&&ft(t.width)&&{[n("width")]:t.width},..."height"in t&&ft(t.height)&&{[n("height")]:t.height},[n("stroke-width")]:f,...j&&{[n("class")]:j},[n("viewBox")]:`0 0 ${i} ${o}`,...t.hasA11yProp===!1?{[n("aria-hidden")]:"true"}:{},..."attributes"in t&&t.attributes},e.node.map(N=>{const[A,g,P]=N,M=t.nonScalingStroke?{[n("vector-effect")]:"non-scaling-stroke",...g}:g;return P?[A,M,P]:[A,M]})]}function Va(e,t={}){return Ka(e,{...t,attributeNames:{...t.attributeNames,class:"className","stroke-width":"strokeWidth","stroke-linecap":"strokeLinecap","stroke-linejoin":"strokeLinejoin","vector-effect":"vectorEffect"}})}const Ba=e=>{for(const t in e)if(t.startsWith("aria-")||t==="role"||t==="title")return!0;return!1},Wa=l.createContext({}),Xa=()=>l.useContext(Wa),Ga=l.forwardRef(({color:e,size:t,width:s,height:n,strokeWidth:i,absoluteStrokeWidth:o,nonScalingStroke:u,className:h="",children:v,iconNode:j=[],icon:f={node:j,aliases:[],size:24},...w},N)=>{const{size:A=24,strokeWidth:g=2,absoluteStrokeWidth:P=!1,nonScalingStroke:M=!1,color:O="currentColor",className:_=""}=Xa()??{},d=!!v||Ba(w),[c,k,S=[]]=Va(f,{color:e??O,width:s??t??A,height:n??t??A,strokeWidth:i??g,absoluteStrokeWidth:o??P,nonScalingStroke:u??M,className:gt(_,h),hasA11yProp:d,attributes:w});return l.createElement(c,{ref:N,...k},[...S.map(([B,C])=>l.createElement(B,C)),...Array.isArray(v)?v:[v]])});function H(e,t=[],s=[]){const n=typeof e=="string"?Fa(e,t,s):e,i=l.forwardRef(({className:o,...u},h)=>l.createElement(Ga,{ref:h,icon:n,className:o,...u}));return n.name&&(i.displayName=Ha(n.name)),i}const Zt={name:"arrow-down-to-line",size:24,node:[["path",{d:"M12 17V3",key:"1cwfxf"}],["path",{d:"m6 11 6 6 6-6",key:"12ii2o"}],["path",{d:"M19 21H5",key:"150jfl"}]]};Zt.node;const Za=H(Zt);const Jt={name:"check",size:24,node:[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]};Jt.node;const Ja=H(Jt);const Yt={name:"chevron-down",size:24,node:[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]};Yt.node;const Ya=H(Yt);const Qt={name:"chevron-up",size:24,node:[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]};Qt.node;const Qa=H(Qt);const ea={name:"circle-alert",size:24,node:[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]],aliases:["alert-circle"]};ea.node;const ta=H(ea);const aa={name:"cloud-off",size:24,node:[["path",{d:"M10.94 5.274A7 7 0 0 1 15.71 10h1.79a4.5 4.5 0 0 1 4.222 6.057",key:"1uxyv8"}],["path",{d:"M18.796 18.81A4.5 4.5 0 0 1 17.5 19H9A7 7 0 0 1 5.79 5.78",key:"99tcn7"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]};aa.node;const es=H(aa);const sa={name:"copy",size:24,node:[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]};sa.node;const ts=H(sa);const na={name:"file-text",size:24,node:[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]};na.node;const Tt=H(na);const ia={name:"list",size:24,node:[["path",{d:"M3 5h.01",key:"18ugdj"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M3 19h.01",key:"noohij"}],["path",{d:"M8 5h13",key:"1pao27"}],["path",{d:"M8 12h13",key:"1za7za"}],["path",{d:"M8 19h13",key:"m83p4d"}]]};ia.node;const as=H(ia);const ra={name:"maximize",size:24,node:[["path",{d:"M8 3H5a2 2 0 0 0-2 2v3",key:"1dcmit"}],["path",{d:"M21 8V5a2 2 0 0 0-2-2h-3",key:"1e4gt3"}],["path",{d:"M3 16v3a2 2 0 0 0 2 2h3",key:"wsl5sc"}],["path",{d:"M16 21h3a2 2 0 0 0 2-2v-3",key:"18trek"}]]};ra.node;const ss=H(ra);const oa={name:"message-square-text",size:24,node:[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}],["path",{d:"M7 11h10",key:"1twpyw"}],["path",{d:"M7 15h6",key:"d9of3u"}],["path",{d:"M7 7h8",key:"af5zfr"}]]};oa.node;const ns=H(oa);const ca={name:"minimize",size:24,node:[["path",{d:"M8 3v3a2 2 0 0 1-2 2H3",key:"hohbtr"}],["path",{d:"M21 8h-3a2 2 0 0 1-2-2V3",key:"5jw1f3"}],["path",{d:"M3 16h3a2 2 0 0 1 2 2v3",key:"198tvr"}],["path",{d:"M16 21v-3a2 2 0 0 1 2-2h3",key:"ph8mxp"}]]};ca.node;const is=H(ca);const la={name:"pause",size:24,node:[["rect",{x:"14",y:"3",width:"5",height:"18",rx:"1",key:"kaeet6"}],["rect",{x:"5",y:"3",width:"5",height:"18",rx:"1",key:"1wsw3u"}]]};la.node;const rs=H(la);const da={name:"pencil",size:24,node:[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]};da.node;const os=H(da);const ua={name:"pin",size:24,node:[["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z",key:"1nkz8b"}]]};ua.node;const cs=H(ua);const ma={name:"plus",size:24,node:[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]};ma.node;const _t=H(ma);const ha={name:"refresh-cw",size:24,node:[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]};ha.node;const rt=H(ha);const fa={name:"rotate-ccw",size:24,node:[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]};fa.node;const ls=H(fa);const pa={name:"send",size:24,node:[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]]};pa.node;const Rt=H(pa);const va={name:"sparkles",size:24,node:[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]],aliases:["stars"]};va.node;const ya=H(va);const ga={name:"thumbs-down",size:24,node:[["path",{d:"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z",key:"m61m77"}],["path",{d:"M17 14V2",key:"8ymqnk"}]]};ga.node;const ds=H(ga);const ka={name:"thumbs-up",size:24,node:[["path",{d:"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z",key:"emmmcr"}],["path",{d:"M7 10v12",key:"1qc93n"}]]};ka.node;const us=H(ka);const _a={name:"trash",size:24,node:[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],aliases:["trash-2"]};_a.node;const $t=H(_a);const ba={name:"triangle-alert",size:24,node:[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]],aliases:["alert-triangle"]};ba.node;const ms=H(ba);const xa={name:"upload",size:24,node:[["path",{d:"M12 3v12",key:"1x0j5s"}],["path",{d:"m17 8-5-5-5 5",key:"7q97r8"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}]]};xa.node;const hs=H(xa);const ja={name:"x",size:24,node:[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]};ja.node;const Ze=H(ja),Pe=()=>globalThis.crypto.randomUUID(),Lt=1e3,pt=(e,t)=>e?.chatId===t.chatId&&e.revision>t.revision?e:t,bt=e=>{const t=e,s=t?.status??t?.response?.status;return s===410||t?.code==="AI_UPLOAD_EXPIRED"?"上传已过期,请移除后重新选择文件":s===409?"数据已变化或对话仍在运行,请刷新后重试":s===401||t?.code==="AI_AUTH_REQUIRED"||t?.code==="AI_AUTH_EXPIRED"?"登录已失效,请重新登录":s===403?"当前账号无权访问该对话":s===404?"对话或回答已不可见,请刷新列表":t?.message?.startsWith("输入内容过长")?t.message:"操作未完成,请重试或刷新对话"};function fs(e,t){const s=t.features?.conversationManagement===!0,n=s?["listConversations","createConversation","getConversation","loadConversation"].filter(r=>typeof t[r]!="function"):[],i=n.length?`会话管理配置不完整:缺少 ${n.join("、")}`:void 0,o=s&&!i,u=o&&t.features?.conversationEditing!==!1&&typeof t.updateConversation=="function",h=o&&t.features?.conversationEditing!==!1&&typeof t.deleteConversation=="function",v=s?t.scopeKey?.(e)??e.app.id:"",j=l.useRef(v);j.current=v;const f=l.useRef(v),[w,N]=l.useState(I.createAssistantConversationState),A=l.useRef(w),g=r=>{const m=typeof r=="function"?r(A.current):r;A.current=m,N(m)},[P,M]=l.useState([]),[O,_]=l.useState(),d=l.useRef(void 0),[c,k]=l.useState(""),[S,B]=l.useState(void 0),[C,W]=l.useState(!1),[le,Q]=l.useState(!1),[de,ae]=l.useState(o),[ke,re]=l.useState(!1),[ot,D]=l.useState(),[ue,oe]=l.useState([]),[Ie,fe]=l.useState([]),Ee=l.useRef(new Set),X=l.useRef(new Map),V=l.useRef(0),ee=l.useRef(0),Ae=l.useRef(0),ce=l.useRef(void 0),ie=l.useRef(void 0),Ne=l.useRef(new Map),R=(r,m=v)=>ee.current===r&&j.current===m,te=()=>{const r=new AbortController;return Ee.current.add(r),r},G=r=>Ee.current.delete(r),Y=r=>{const m=r?pt(d.current,r):void 0;d.current=m,_(m)},pe=r=>{M(m=>m.map(y=>y.chatId===r.chatId?pt(y,r):y))},_e=r=>{M(m=>m.filter(y=>y.chatId!==r))},Fe=()=>{Ae.current+=1},ge=()=>{for(const r of X.current.values())r.abort();X.current.clear()},J=r=>{r instanceof Error&&r.name==="AbortError"||(console.warn("[make-ai-assistant] conversation operation failed",{errorType:r instanceof Error?r.name:typeof r}),D(bt(r)))},be=async r=>{if(!o||!t.listConversations)return;const m=ee.current,y=++Ae.current,x=te();try{const E=await t.listConversations(e,{cursor:r},{signal:x.signal});if(!R(m)||x.signal.aborted||y!==Ae.current)return;M($=>{const b=new Map($.map(T=>[T.chatId,T])),L=E.chats.map(T=>pt(b.get(T.chatId),T));return[...new Map([...r?$:[],...L].map(T=>[T.chatId,T])).values()]}),k(E.nextCursor)}catch(E){R(m)&&!x.signal.aborted&&y===Ae.current&&J(E)}finally{G(x),R(m)&&y===Ae.current&&ae(!1)}},qe=async r=>{if(!t.getConversation)return;const m=ee.current,y=te();try{const x=await t.getConversation(e,{chatId:r},{signal:y.signal});if(!R(m)||y.signal.aborted||x.chatId!==r)return;pe(x),d.current?.chatId===r&&Y(x)}catch(x){R(m)&&!y.signal.aborted&&J(x)}finally{G(y)}},Ce=async(r,m,y)=>{const x=ee.current,E=V.current;let $;try{for await(const b of r){if(!R(x)||m.signal.aborted||E!==V.current||d.current?.chatId!==y)return;const L=I.parseAssistantEvent(b);if(L.type==="response.accepted"||L.type==="response.state"){$=L.responseId;const T=X.current.get($);if(T&&T!==m){L.type==="response.accepted"&&g(F=>I.reduceAssistantEvent(F,L)),m.abort();return}X.current.set($,m)}g(T=>I.reduceAssistantEvent(T,L)),L.type==="response.accepted"&&qe(y),L.type==="response.terminal"&&(oe(T=>T.filter(F=>F!==L.responseId)),be())}}catch(b){R(x)&&!m.signal.aborted&&E===V.current&&(J(b),$||g(L=>({...L,status:Object.values(L.responses??{}).some(T=>!ht.isResponseTerminal(T))?"streaming":"error"})))}finally{$&&X.current.get($)===m&&X.current.delete($),G(m)}},me=async(r,m,y,x)=>{if(!t.getResponse||!t.watchResponse)return;const E=new Set(r.filter(b=>b.role==="assistant"&&b.persistent).map(b=>b.responseId)),$=[...new Map(r.filter(b=>b.role==="user"&&b.responseId&&!E.has(b.responseId)).map(b=>[b.responseId,b.cursor])).entries()].slice(-20);for(const[b,L]of $){if(!R(x)||y!==V.current)return;if(X.current.has(b))continue;const T=te();try{const F=await t.getResponse(e,{chatId:m,responseId:b},{signal:T.signal});if(!R(x)||T.signal.aborted||y!==V.current||X.current.has(b))continue;g(p=>I.reduceAssistantEvent(p,ht.isResponseTerminal(F)?{type:"response.snapshot",snapshot:F}:{type:"response.state",chatId:m,responseId:b,status:F.status})),F.status==="failed"||F.status==="cancelled"?g(p=>I.reduceAssistantEvent(p,{type:"response.terminal",chatId:m,responseId:b,status:F.status})):(X.current.set(b,T),Ce(t.watchResponse(e,{chatId:m,responseId:b,historyCursor:L},{signal:T.signal}),T,m))}catch(F){R(x)&&!T.signal.aborted&&J(F)}finally{X.current.get(b)!==T&&G(T)}}},He=async r=>{if(!o)return;const m=++V.current,y=ee.current,x=te();ge(),D(void 0),ae(!0),oe([]),ie.current=void 0,Y(r),g({messages:[],status:"idle",threadId:r.chatId}),B(void 0),W(!1),Q(!1);try{const[E,$]=await Promise.all([t.getConversation(e,{chatId:r.chatId},{signal:x.signal}),t.loadConversation(e,{threadId:r.chatId,cursor:void 0,signal:x.signal})]);if(!R(y)||x.signal.aborted||m!==V.current)return;if(E.chatId!==r.chatId||$.threadId!==r.chatId)throw new Error("Conversation mismatch");Y(E),g(I.createAssistantConversationState($)),B($.nextCursor??-1),W($.hasMore??!1),me($.messages,r.chatId,m,y)}catch(E){R(y)&&!x.signal.aborted&&m===V.current&&J(E)}finally{G(x),R(y)&&m===V.current&&ae(!1)}},Te=async()=>{if(!o)throw new Error(i??"会话管理不可用");if(d.current)return d.current;if(ce.current??={requestId:Pe()},ce.current.promise)return ce.current.promise;const r=ee.current,m=V.current,y=te(),x=ce.current;return re(!0),x.promise=t.createConversation(e,{requestId:x.requestId},{signal:y.signal}).then(E=>{if(!R(r)||y.signal.aborted||m!==V.current)throw Object.assign(new Error("Stale create"),{name:"AbortError"});return ce.current=void 0,Y(E),g({messages:[],status:"idle",threadId:E.chatId}),be(),E}).finally(()=>{G(y),x.promise=void 0,R(r)&&re(!1)}),x.promise},Je=async()=>{if(!(!o||ke||ce.current?.promise)){V.current+=1,ge(),Y(void 0),D(void 0),ie.current=void 0,g(I.createAssistantConversationState()),W(!1),B(void 0);try{await Te()}catch(r){J(r)}}},Ke=async r=>{const m=te();ie.current=r,D(void 0),A.current.messages.some(y=>y.id===r.message.id)||g(y=>I.appendUserMessage(y,r.message)),await Ce(t.run(r,{signal:m.signal}),m,r.threadId)},Ye=async(r,m)=>{if(!(!o||!r.trim()&&!m?.length))try{const y=await Te(),x={id:Pe(),content:r,...m?{parts:m}:{}};await Ke({threadId:y.chatId,message:x,context:e,capabilities:{artifactSchemaVersions:[],artifactKinds:[],templates:[]}})}catch(y){J(y)}},Re=async()=>{const r=ie.current;if(!r||r.threadId!==d.current?.chatId){d.current&&await He(d.current);return}const m=A.current.messages.find(y=>y.id===r.message.id);if(m?.responseId&&t.watchResponse){const y=m.responseId;if(X.current.has(y))return;const x=te();X.current.set(y,x),D(void 0),await Ce(t.watchResponse(e,{chatId:r.threadId,responseId:y,historyCursor:m.cursor},{signal:x.signal}),x,r.threadId)}else await Ke(r)},ct=async(r=A.current.activeRunId)=>{const m=d.current;if(!m||!r||!t.cancelResponse||ue.includes(r))return;const y=ee.current,x=V.current,E=te();oe($=>[...$,r]),D(void 0);try{const $=await t.cancelResponse(e,{chatId:m.chatId,responseId:r},{signal:E.signal});if(!R(y)||x!==V.current)return;if(ht.isResponseTerminal($))g(b=>I.reduceAssistantEvent(b,{type:"response.snapshot",snapshot:$})),oe(b=>b.filter(L=>L!==r));else if(!X.current.has(r)&&t.watchResponse){const b=te();X.current.set(r,b),Ce(t.watchResponse(e,{chatId:m.chatId,responseId:r},{signal:b.signal}),b,m.chatId)}}catch($){R(y)&&x===V.current&&(J($),oe(b=>b.filter(L=>L!==r)))}finally{G(E)}},lt=async(r,m=d.current)=>{if(!u||!m||ke)return!1;const y=ee.current,x=te();re(!0),D(void 0);try{const E=await t.updateConversation(e,{chatId:m.chatId,expectedRevision:m.revision,...r},{signal:x.signal});return R(y)?(Fe(),pe(E),d.current?.chatId===E.chatId&&Y(E),!0):!1}catch(E){if(R(y)){J(E);try{const $=await t.getConversation(e,{chatId:m.chatId},{signal:x.signal});R(y)&&d.current?.chatId===m.chatId&&Y($)}catch{}be()}return!1}finally{G(x),R(y)&&re(!1)}},Qe=async(r=d.current)=>{if(!h||!r||ke)return!1;const m=ee.current,y=te();re(!0),D(void 0);try{return await t.deleteConversation(e,{chatId:r.chatId,expectedRevision:r.revision},{signal:y.signal}),R(m)?(Fe(),_e(r.chatId),d.current?.chatId===r.chatId&&(V.current+=1,ge(),Y(void 0),g(I.createAssistantConversationState())),!0):!1}catch(x){return R(m)&&J(x),!1}finally{G(y),R(m)&&re(!1)}},$e=async(r,m,y="",x="")=>{const E=d.current;if(!E||!r.persistent||!t.setFeedback||Ie.includes(r.id))return;const $={chatId:E.chatId,messageId:r.id,rating:m,...y?{reason:y}:{},...x?{comment:x}:{}},b=Ne.current.get(r.id),{requestId:L,...T}=b??{requestId:""},F=b&&JSON.stringify(T)===JSON.stringify($)?b:{...$,requestId:Pe()};Ne.current.set(r.id,F);const p=ee.current,U=V.current,q=te();fe(K=>[...K,r.id]),D(void 0);try{const K=await t.setFeedback(e,F,{signal:q.signal});return!R(p)||U!==V.current||Ne.current.get(r.id)!==F?void 0:(g(se=>({...se,messages:se.messages.map(ve=>ve.id===r.id&&K.revision>=(ve.feedback?.revision??0)?{...ve,feedback:K}:ve)})),Ne.current.delete(r.id),!0)}catch(K){return R(p)&&U===V.current&&J(K),!1}finally{G(q),R(p)&&fe(K=>K.filter(se=>se!==r.id))}},dt=async()=>{if(!d.current||!C||de)return;const r=ee.current,m=V.current,y=d.current,x=te();ae(!0);try{const E=await t.loadConversation(e,{threadId:y.chatId,cursor:S,signal:x.signal});if(!R(r)||m!==V.current)return;const $=I.createAssistantConversationState(E),b=[...new Map([...A.current.messages,...$.messages].map(F=>[F.id,F])).values()];let L=0;const T=[];for(const F of b.slice(-200).reverse()){if(L+=[...F.content].length,L>1e6)break;T.unshift(F)}T.length<b.length&&Q(!0),g(F=>({...F,messages:T})),B(E.nextCursor??S),W(E.hasMore??!1),me(E.messages,y.chatId,m,r)}catch(E){R(r)&&J(E)}finally{G(x),R(r)&&ae(!1)}},Ve=[...new Set([...P.filter(r=>r.titlePending).map(r=>r.chatId),...O?.titlePending?[O.chatId]:[]])].sort().join("\0");l.useEffect(()=>{if(!s||!t.getConversation||!Ve)return;const r=ee.current,m=te(),y=Ve.split("\0"),x=new Set;let E;console.debug("[make-ai-assistant] watching pending conversation titles",{count:y.length});const $=async()=>{await Promise.all(y.map(async b=>{if(!x.has(b))try{const L=await t.getConversation(e,{chatId:b},{signal:m.signal});if(!R(r)||m.signal.aborted||L.chatId!==b)return;pe(L),d.current?.chatId===b&&Y(L)}catch(L){if(!R(r)||m.signal.aborted)return;console.warn("[make-ai-assistant] title metadata refresh failed",{errorType:L instanceof Error?L.name:typeof L});const T=L?.status;T===401?(m.abort(),J(L)):(T===403||T===404)&&(x.add(b),d.current?.chatId===b&&J(L))}})),R(r)&&!m.signal.aborted&&y.some(b=>!x.has(b))&&(E=setTimeout(()=>{$()},Lt))};return E=setTimeout(()=>{$()},Lt),()=>{clearTimeout(E),m.abort(),G(m)}},[s,v,t,Ve]),l.useEffect(()=>(ee.current+=1,f.current=v,ce.current=void 0,ie.current=void 0,Ne.current.clear(),Y(void 0),M([]),k(""),g(I.createAssistantConversationState()),D(void 0),ae(o),re(!1),oe([]),fe([]),o&&be(),()=>{ee.current+=1,V.current+=1;for(const r of Ee.current)r.abort();Ee.current.clear(),X.current.clear()}),[o,v,t]);const Me=f.current===v;return{enabled:s,available:o,configurationError:i,canEdit:u,canDelete:h,state:Me?w:I.createAssistantConversationState(),setState:g,chats:Me?P:[],chat:Me?O:void 0,listCursor:c,historyMore:C,historyTruncated:le,loading:!Me||de,busy:ke,error:Me?ot:void 0,cancelling:ue,feedbackBusy:Ie,refresh:be,select:He,create:Je,ensureChat:Te,send:Ye,retry:Re,stop:ct,update:lt,remove:Qe,feedback:$e,moreHistory:dt,setError:D}}const ps=({anchor:e,label:t,onDismiss:s})=>{const[n,i]=l.useState();if(l.useLayoutEffect(()=>{const u=()=>{if(!e.isConnected){s();return}const h=e.getBoundingClientRect(),v=h.top>=48?"above":"below";i({left:h.left+h.width/2,placement:v,top:v==="above"?h.top-8:h.bottom+8})};return u(),window.addEventListener("resize",u),document.addEventListener("scroll",u,!0),()=>{window.removeEventListener("resize",u),document.removeEventListener("scroll",u,!0)}},[e,s]),!n||typeof document>"u")return null;const o=e.closest(".make-ai-assistant")??document.body;return Ht.createPortal(a.jsx("span",{className:"make-ai-assistant__conversation-tooltip","data-placement":n.placement,role:"tooltip",style:{left:n.left,top:n.top},children:t}),o)};function vs({id:e,manager:t,onDismiss:s,onNewConversation:n,triggerRef:i}){const[o,u]=l.useState(),[h,v]=l.useState(""),[j,f]=l.useState(),[w,N]=l.useState(),A=l.useRef(null),g=(c,k)=>{N(S=>S?.anchor===k&&S.label===c?S:{anchor:k,label:c})},P=c=>{N(k=>k?.anchor===c?void 0:k)},M=c=>({"data-tooltip":c,onBlur:k=>P(k.currentTarget),onFocus:k=>g(c,k.currentTarget),onPointerEnter:k=>g(c,k.currentTarget),onPointerLeave:k=>P(k.currentTarget)}),O=()=>{u(void 0),v("")},_=async c=>{const k=h.trim();k&&await t.update({title:k},c)&&O()},d=async c=>{await t.remove(c)&&f(void 0)};return l.useEffect(()=>{const c=k=>{const S=k.target;S instanceof Node&&(A.current?.contains(S)||i.current?.contains(S)||s())};return document.addEventListener("pointerdown",c),()=>{document.removeEventListener("pointerdown",c)}},[s,i]),a.jsxs("div",{"aria-label":"任务列表",className:"make-ai-assistant__conversation-controls",id:e,ref:A,role:"dialog",children:[a.jsxs("div",{className:"make-ai-assistant__conversation-heading",children:[a.jsx("span",{children:"最近对话"}),a.jsx("button",{"aria-label":"刷新任务列表",className:"make-ai-assistant__conversation-refresh",disabled:t.busy,type:"button",...M("刷新"),onClick:()=>{t.refresh()},children:a.jsx(rt,{"aria-hidden":"true",className:"make-ai-assistant__conversation-refresh-icon"})})]}),a.jsxs("nav",{"aria-label":"对话列表",className:"make-ai-assistant__conversation-list",children:[t.chats.map(c=>{const k=o===c.chatId,S=j===c.chatId,B=c.title||"未命名对话";return a.jsxs("div",{className:"make-ai-assistant__conversation-row","data-active":t.chat?.chatId===c.chatId||void 0,"data-editing":k||S||void 0,children:[S?a.jsxs("div",{"aria-label":"确认删除对话",className:"make-ai-assistant__conversation-delete-confirmation",role:"group",children:[a.jsx(ms,{"aria-hidden":"true",className:"make-ai-assistant__conversation-delete-confirmation-icon"}),a.jsxs("span",{className:"make-ai-assistant__conversation-delete-confirmation-message",children:["确认删除“",B,"”?"]}),a.jsx("button",{"aria-label":`确认删除:${B}`,className:"make-ai-assistant__conversation-row-action make-ai-assistant__conversation-row-action--danger make-ai-assistant__conversation-delete-confirmation-confirm",disabled:t.busy||!t.canDelete,type:"button",...M("确认删除"),onClick:()=>{d(c)},children:a.jsx($t,{"aria-hidden":"true",className:"make-ai-assistant__conversation-row-action-icon"})}),a.jsx("button",{"aria-label":`取消删除:${B}`,className:"make-ai-assistant__conversation-row-action make-ai-assistant__conversation-delete-confirmation-cancel",disabled:t.busy,type:"button",...M("取消"),onClick:()=>f(void 0),children:a.jsx(Ze,{"aria-hidden":"true",className:"make-ai-assistant__conversation-row-action-icon"})})]}):k?a.jsx("input",{"aria-label":"对话标题",autoFocus:!0,className:"make-ai-assistant__conversation-row-title-input",disabled:t.busy,maxLength:255,value:h,onChange:C=>v(C.currentTarget.value),onKeyDown:C=>{C.nativeEvent.isComposing||(C.key==="Escape"&&(C.preventDefault(),O()),C.key==="Enter"&&(C.preventDefault(),_(c)))}}):a.jsxs("button",{"aria-pressed":t.chat?.chatId===c.chatId,className:"make-ai-assistant__conversation-row-select",type:"button",onClick:()=>{s(),t.select(c)},children:[a.jsx(ns,{"aria-hidden":"true"}),a.jsx("span",{children:B})]}),k?a.jsxs("div",{"aria-label":"修改标题操作",className:"make-ai-assistant__conversation-row-actions",role:"group",children:[a.jsx("button",{"aria-label":"确认修改标题",className:"make-ai-assistant__conversation-row-action",disabled:t.busy||!h.trim(),type:"button",...M("保存标题"),onClick:()=>{_(c)},children:a.jsx(Ja,{"aria-hidden":"true",className:"make-ai-assistant__conversation-row-action-icon"})}),a.jsx("button",{"aria-label":"取消修改标题",className:"make-ai-assistant__conversation-row-action",disabled:t.busy,type:"button",...M("取消"),onClick:O,children:a.jsx(Ze,{"aria-hidden":"true",className:"make-ai-assistant__conversation-row-action-icon"})})]}):S?null:a.jsxs("div",{className:"make-ai-assistant__conversation-row-actions",children:[a.jsx("button",{"aria-label":`${c.pinned?"取消置顶":"置顶"} ${B}`,"aria-pressed":c.pinned,className:"make-ai-assistant__conversation-row-action make-ai-assistant__conversation-row-pin",disabled:t.busy||!t.canEdit,type:"button",...M(c.pinned?"取消置顶":"置顶"),onClick:()=>{t.update({pinned:!c.pinned},c)},children:a.jsx(cs,{"aria-hidden":"true",className:"make-ai-assistant__conversation-row-action-icon"})}),a.jsx("button",{"aria-label":`修改标题:${B}`,className:"make-ai-assistant__conversation-row-action",disabled:t.busy||!t.canEdit,type:"button",...M("修改标题"),onClick:()=>{f(void 0),u(c.chatId),v(c.title)},children:a.jsx(os,{"aria-hidden":"true",className:"make-ai-assistant__conversation-row-action-icon"})}),a.jsx("button",{"aria-label":`删除:${B}`,className:"make-ai-assistant__conversation-row-action make-ai-assistant__conversation-row-action--danger",disabled:t.busy||!t.canDelete,type:"button",...M("删除"),onClick:()=>{O(),f(c.chatId)},children:a.jsx($t,{"aria-hidden":"true",className:"make-ai-assistant__conversation-row-action-icon"})})]})]},c.chatId)}),!t.loading&&!t.chats.length?a.jsx("p",{children:"暂无对话,发送消息即可新建"}):null,t.listCursor?a.jsx("button",{className:"make-ai-assistant__conversation-more",type:"button",onClick:()=>{t.refresh(t.listCursor)},children:"更多对话"}):null]}),t.chat&&(t.historyMore||t.historyTruncated||t.state.historyTruncated)?a.jsxs("div",{className:"make-ai-assistant__conversation-history-actions",children:[t.historyMore?a.jsx("button",{type:"button",disabled:t.loading,onClick:()=>{t.moreHistory()},children:"继续加载历史"}):null,t.historyTruncated||t.state.historyTruncated?a.jsx("p",{children:"当前展示有界消息窗口,可重新选择对话从头读取。"}):null]}):null,t.error?a.jsxs("div",{className:"make-ai-assistant__conversation-error",role:"alert",children:[a.jsx("span",{children:t.error}),a.jsx("button",{type:"button",onClick:()=>{t.retry()},children:"恢复对话"})]}):null,n?a.jsxs("button",{className:"make-ai-assistant__conversation-new",type:"button",onClick:n,children:[a.jsx(_t,{"aria-hidden":"true",className:"make-ai-assistant__conversation-new-icon"}),a.jsx("span",{children:"新建对话"})]}):null,w?a.jsx(ps,{anchor:w.anchor,label:w.label,onDismiss:()=>N(void 0)}):null]})}function ys({message:e,manager:t}){const[s,n]=l.useState(!1),[i,o]=l.useState(""),[u,h]=l.useState(""),v=t.feedbackBusy.includes(e.id);if(!e.persistent||e.role!=="assistant"||e.intermediate)return null;const j=e.feedback?.rating??"none";return a.jsxs("div",{"aria-label":"回答反馈",className:"make-ai-assistant__feedback",role:"group",children:[a.jsx("button",{type:"button","aria-label":"喜欢","aria-pressed":j==="like",className:"make-ai-assistant__reply-action make-ai-assistant__reply-feedback-action","data-tooltip":"喜欢",disabled:v,onClick:()=>{t.feedback(e,j==="like"?"none":"like")},children:a.jsx(us,{"aria-hidden":"true",className:"make-ai-assistant__reply-feedback-icon"})}),a.jsx("button",{type:"button","aria-label":"不喜欢","aria-pressed":j==="dislike",className:"make-ai-assistant__reply-action make-ai-assistant__reply-feedback-action","data-tooltip":"不喜欢",disabled:v,onClick:()=>{if(j==="dislike"){t.feedback(e,"none");return}o(e.feedback?.reason??""),h(e.feedback?.comment??""),n(!0)},children:a.jsx(ds,{"aria-hidden":"true",className:"make-ai-assistant__reply-feedback-icon"})}),j==="dislike"?a.jsx("button",{className:"make-ai-assistant__feedback-text-action",type:"button",disabled:v,onClick:()=>{o(e.feedback?.reason??""),h(e.feedback?.comment??""),n(!0)},children:"修改反馈"}):null,s?a.jsxs("form",{onSubmit:f=>{f.preventDefault(),t.feedback(e,"dislike",i,u).then(w=>{w&&n(!1)})},children:[a.jsx("input",{"aria-label":"反馈原因",maxLength:128,value:i,onChange:f=>o(f.currentTarget.value),placeholder:"原因(可选)"}),a.jsx("textarea",{"aria-label":"反馈说明",maxLength:4e3,value:u,onChange:f=>h(f.currentTarget.value),placeholder:"补充说明(可选)"}),a.jsx("button",{className:"make-ai-assistant__feedback-text-action",type:"submit",disabled:v,children:"提交反馈"}),a.jsx("button",{className:"make-ai-assistant__feedback-text-action",type:"button",onClick:()=>n(!1),children:"取消"})]}):null]})}const zt=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 gs({part:e,context:t,transport:s,chatId:n}){const[i,o]=l.useState(),[u,h]=l.useState(),[v,j]=l.useState(!1),f=l.useRef([]),w=l.useRef(void 0);l.useEffect(()=>()=>{w.current?.abort(),f.current.forEach(A=>URL.revokeObjectURL(A))},[]);const N=async A=>{if(!s.readContent||v)return;const g=new AbortController;w.current=g,j(!0),h(void 0);try{const P=await s.readContent(t,{chatId:n,contentRef:e.media.contentRef},{signal:g.signal});if(g.signal.aborted)return;const M=new Blob([new Uint8Array(P).buffer],{type:A&&zt.has(e.media.contentType)?e.media.contentType:"application/octet-stream"}),O=URL.createObjectURL(M);if(f.current.push(O),A)o(O);else{const _=document.createElement("a");_.href=O,_.download=e.name??"attachment",_.click()}}catch(P){g.signal.aborted||h(bt(P))}finally{g.signal.aborted||j(!1)}};return a.jsxs("div",{className:"make-ai-assistant__attachment",children:[a.jsxs("span",{children:[e.name??"附件"," · ",e.media.sizeBytes," 字节"]}),s.readContent?a.jsxs(a.Fragment,{children:[a.jsx("button",{type:"button",disabled:v,onClick:()=>{N(!1)},children:"下载附件"}),zt.has(e.media.contentType)?a.jsx("button",{type:"button",disabled:v,onClick:()=>{N(!0)},children:"预览附件"}):null]}):null,u?a.jsx("span",{role:"alert",children:u}):null,i&&e.kind==="image"?a.jsx("img",{src:i,alt:e.name??"附件图片"}):null,i&&e.kind==="audio"?a.jsx("audio",{src:i,controls:!0}):null,i&&e.kind==="video"?a.jsx("video",{src:i,controls:!0}):null]})}function ks({message:e,context:t,transport:s,chatId:n}){return a.jsx(a.Fragment,{children:e.parts?.map((i,o)=>i.kind==="text"?null:i.kind==="unknown"?a.jsx("span",{className:"make-ai-assistant__attachment",children:i.textFallback??"此内容类型暂不支持展示"},i.id??`${e.id}:${o}`):a.jsx(gs,{part:i,context:t,transport:s,chatId:n},i.id??`${e.id}:${o}`))})}const Dt=e=>{switch(e.status){case"ready":return"已上传";case"completing":return"校验中";case"paused":return"已暂停";case"failed":return"上传失败";default:return`${Math.round(e.progress*100)}%`}},_s=(e,t)=>{switch(e.status){case"uploading":case"queued":return t;case"completing":return"校验";case"paused":return"暂停";case"failed":return"失败";case"ready":return}},wa=e=>e.type.split(";")[0].trim().toLowerCase()||"application/octet-stream",bs=e=>e.startsWith("image/")&&e!=="image/svg+xml"?"image":e.startsWith("audio/")?"audio":e.startsWith("video/")?"video":"file",xs=e=>{const t=wa(e);if(!(!t.startsWith("image/")||t==="image/svg+xml"||typeof URL>"u"||typeof URL.createObjectURL!="function"))return URL.createObjectURL(e)},Pt=e=>{e&&typeof URL<"u"&&typeof URL.revokeObjectURL=="function"&&URL.revokeObjectURL(e)},js=(e,t)=>new Promise((s,n)=>{const i=new FileReader,o=()=>t.removeEventListener("abort",u),u=()=>{i.abort(),o(),n(Object.assign(new Error("Read aborted"),{name:"AbortError"}))};if(t.aborted){u();return}t.addEventListener("abort",u,{once:!0}),i.onload=()=>{o(),s(new Uint8Array(i.result))},i.onerror=()=>{o(),n(new Error("无法读取文件"))},i.readAsArrayBuffer(e)});function ws(e,t,s){const[n,i]=l.useState([]),o=l.useRef(new Map),u=l.useRef(Promise.resolve()),h=t.scopeKey?.(e)??e.app.id,v=l.useRef(h);v.current=h;const j=l.useRef(void 0),f=s.available&&t.features?.attachments===!0&&typeof t.startUpload=="function"&&typeof t.getUpload=="function"&&typeof t.uploadPart=="function"&&typeof t.completeUpload=="function",w=(d,c)=>{!o.current.has(d.draft.id)||d.scope!==v.current||(d.draft={...d.draft,...c},i([...o.current.values()].map(k=>k.draft)))},N=()=>{for(const d of o.current.values())d.controller.abort(),Pt(d.draft.previewUrl);o.current.clear(),i([]),j.current=void 0,u.current=Promise.resolve()};l.useEffect(()=>(N(),N),[h,t]),l.useEffect(()=>{j.current&&s.chat?.chatId!==j.current&&N()},[s.chat?.chatId]);const A=async d=>{const c=d.controller.signal,k=()=>{if(c.aborted||d.scope!==v.current||!o.current.has(d.draft.id))throw Object.assign(new Error("Upload aborted"),{name:"AbortError"})};try{if(k(),d.file.size>64<<20)throw new Error("文件不能超过 64 MiB");const S=await s.ensureChat();k(),j.current=S.chatId;const B=wa(d.file);w(d,{status:"uploading",error:void 0});let C=d.draft.upload?await t.getUpload(e,{chatId:S.chatId,uploadId:d.draft.upload.id},{signal:c}):await t.startUpload(e,{chatId:S.chatId,fileId:d.draft.fileId,name:d.file.name,contentType:B,sizeBytes:d.file.size},{signal:c});if(k(),w(d,{upload:C}),C.name!==d.file.name||C.contentType!==B||C.sizeBytes!==d.file.size)throw new Error("上传文件身份不一致");if(C.status!=="ready"){if(C=await t.getUpload(e,{chatId:S.chatId,uploadId:C.id},{signal:c}),k(),C.status!=="uploading"||!Number.isSafeInteger(C.partSize)||C.partSize<=0||C.partSize>1<<20)throw new Error("当前上传状态无法继续,请重新选择文件");const W=new Set(C.completedParts),le=Math.ceil(d.file.size/C.partSize);for(let Q=0;Q<le;Q+=1){if(k(),!W.has(Q)){const de=await js(d.file.slice(Q*C.partSize,Math.min(d.file.size,(Q+1)*C.partSize)),c);k(),await t.uploadPart(e,{chatId:S.chatId,uploadId:C.id,part:Q,bytes:de},{signal:c}),k(),W.add(Q)}w(d,{progress:W.size/Math.max(le,1)})}w(d,{status:"completing"}),C=await t.completeUpload(e,{chatId:S.chatId,uploadId:C.id},{signal:c}),k()}if(C.status!=="ready"||!C.content)throw new Error("上传尚未完成");w(d,{status:"ready",progress:1,upload:C})}catch(S){w(d,{status:c.aborted?"paused":"failed",error:c.aborted?void 0:bt(S)})}},g=d=>{if(f){if(d.length+o.current.size>32){s.setError("每条消息最多包含 32 个附件或文本片段");return}for(const c of d){const k={id:Pe(),fileId:Pe(),name:c.name,size:c.size,status:"queued",progress:0,previewUrl:xs(c)},S={draft:k,file:c,controller:new AbortController,scope:h};o.current.set(k.id,S),u.current=u.current.then(()=>A(S))}i([...o.current.values()].map(c=>c.draft))}},P=d=>{const c=o.current.get(d);!c||!["paused","failed"].includes(c.draft.status)||(c.controller=new AbortController,w(c,{status:"queued"}),u.current=u.current.then(()=>A(c)))},M=d=>{const c=o.current.get(d);c?.controller.abort(),Pt(c?.draft.previewUrl),o.current.delete(d),i([...o.current.values()].map(k=>k.draft))},O=d=>o.current.get(d)?.controller.abort(),_=n.flatMap(d=>{const c=d.upload;if(d.status!=="ready"||!c?.content)return[];const k=bs(c.contentType);return[{id:d.id,kind:k,name:c.name,media:{contentRef:c.content.contentRef,contentType:c.contentType,sizeBytes:c.content.sizeBytes,digestSha256:c.content.digestSha256}}]});return{enabled:f,drafts:n,parts:_,pending:n.some(d=>d.status!=="ready"),add:g,retry:P,remove:M,pause:O,clear:N}}function Is({attachments:e,onOpenChange:t,open:s,triggerRef:n}){const i=l.useRef(null),o=l.useRef(null);l.useEffect(()=>{if(!s)return;const h=v=>{const j=v.target;j instanceof Node&&!i.current?.contains(j)&&t(!1)};return document.addEventListener("pointerdown",h),()=>{document.removeEventListener("pointerdown",h)}},[t,s]);const u=h=>{e.add(Array.from(h.files??[])),h.value="",t(!1)};return a.jsxs("div",{className:"make-ai-assistant__attachment-composer",ref:i,children:[a.jsx("button",{"aria-expanded":s,"aria-haspopup":"menu","aria-label":"添加附件",className:"make-ai-assistant__attachment-trigger",ref:n,title:"添加附件",type:"button",onClick:()=>t(!s),children:a.jsx(_t,{"aria-hidden":"true",className:"make-ai-assistant__attachment-trigger-icon"})}),s?a.jsx("div",{"aria-label":"附件选项",className:"make-ai-assistant__attachment-menu",role:"menu",children:a.jsxs("button",{role:"menuitem",type:"button",onClick:()=>o.current?.click(),children:[a.jsx(hs,{"aria-hidden":"true"}),a.jsx("span",{children:"上传文件或图片"})]})}):null,a.jsx("input",{"aria-label":"上传文件或图片",hidden:!0,multiple:!0,ref:o,type:"file",onChange:h=>u(h.currentTarget)})]})}function As({attachments:e,visible:t}){const[s,n]=l.useState(),i=e.drafts.find(f=>f.id===s),o=!!i,u=l.useRef(null),h=l.useRef(null),v=l.useCallback(()=>{n(void 0),h.current?.focus()},[]);if(l.useEffect(()=>{if(!o)return;const f=w=>{w.key==="Escape"&&(w.preventDefault(),w.stopImmediatePropagation(),v())};return document.addEventListener("keydown",f,!0),()=>document.removeEventListener("keydown",f,!0)},[v,o]),l.useEffect(()=>{t||n(void 0)},[t]),!e.drafts.length)return null;const j=typeof document>"u"?void 0:u.current?.closest(".make-ai-assistant")??document.body;return a.jsxs("div",{"aria-label":"待发送附件",className:"make-ai-assistant__attachment-drafts",ref:u,children:[a.jsx("ul",{children:e.drafts.map(f=>{const w=Dt(f),N=_s(f,w);return a.jsxs("li",{"aria-label":`${f.name},${w}`,"data-status":f.status,children:[f.previewUrl?a.jsx("button",{"aria-label":`预览附件 ${f.name}`,className:"make-ai-assistant__attachment-draft-preview-button",type:"button",onClick:A=>{h.current=A.currentTarget,n(f.id)},children:a.jsx("img",{alt:"",className:"make-ai-assistant__attachment-draft-preview",src:f.previewUrl})}):a.jsx("button",{"aria-label":`查看附件详情 ${f.name}`,className:"make-ai-assistant__attachment-draft-file",type:"button",onClick:A=>{h.current=A.currentTarget,n(f.id)},children:a.jsx(Tt,{"aria-hidden":"true"})}),N?a.jsx("span",{"aria-hidden":"true",className:"make-ai-assistant__attachment-draft-status",children:N}):null,f.error?a.jsx("span",{className:"make-ai-assistant__attachment-draft-error",role:"alert",children:f.error}):null,f.status==="failed"||f.status==="paused"?a.jsx("button",{"aria-label":`重试上传 ${f.name}`,className:"make-ai-assistant__attachment-draft-control",title:"重试上传",type:"button",onClick:()=>e.retry(f.id),children:a.jsx(ls,{"aria-hidden":"true"})}):null,f.status==="uploading"?a.jsx("button",{"aria-label":`暂停上传 ${f.name}`,className:"make-ai-assistant__attachment-draft-control",title:"暂停上传",type:"button",onClick:()=>e.pause(f.id),children:a.jsx(rs,{"aria-hidden":"true"})}):null,a.jsx("button",{"aria-label":`移除附件 ${f.name}`,className:"make-ai-assistant__attachment-draft-remove",type:"button",onClick:()=>{s===f.id&&v(),e.remove(f.id)},children:a.jsx(Ze,{"aria-hidden":"true",className:"make-ai-assistant__attachment-draft-remove-icon"})})]},f.id)})}),i&&j?Ht.createPortal(a.jsx("div",{className:"make-ai-assistant__attachment-preview-backdrop",onPointerDown:f=>{f.target===f.currentTarget&&v()},children:a.jsxs("div",{"aria-label":`${i.previewUrl?"预览附件":"附件详情"} ${i.name}`,"aria-modal":"true",className:"make-ai-assistant__attachment-preview-dialog","data-kind":i.previewUrl?"image":"file",role:"dialog",onKeyDown:f=>{f.key==="Tab"&&f.preventDefault()},children:[a.jsx("button",{"aria-label":`${i.previewUrl?"关闭图片预览":"关闭附件详情"} ${i.name}`,autoFocus:!0,className:"make-ai-assistant__attachment-preview-close",type:"button",onClick:v,children:a.jsx(Ze,{"aria-hidden":"true",className:"make-ai-assistant__attachment-preview-close-icon"})}),i.previewUrl?a.jsx("img",{alt:i.name,src:i.previewUrl}):a.jsx("div",{"aria-hidden":"true",className:"make-ai-assistant__attachment-preview-file",children:a.jsx(Tt,{})}),a.jsxs("div",{className:"make-ai-assistant__attachment-preview-details",children:[a.jsx("strong",{children:i.name}),a.jsx("span",{children:Dt(i)}),i.error?a.jsx("p",{children:i.error}):null]})]})}),j):null]})}const Ns=e=>`${e}-${Date.now()}-${Math.random().toString(36).slice(2,9)}`,Cs="Make",Ms=["总结当前页面数据","找出需要关注的记录","列出我有权限查看的数据对象"],Ss=48,Es=160,Ia=(e,t)=>t??`${e?.trim()||Cs} AI 助手`,Ts=e=>e??Ms,Rs=e=>typeof e=="number"&&Number.isFinite(e)&&e>0?e:void 0,$s=e=>typeof e=="number"?Number.isFinite(e)?`${e}px`:void 0:e?.trim()||void 0;class Z extends Error{}const nt=(e,t)=>{if(!(typeof e!="object"||e===null))return e[t]},Ls=e=>{const t=nt(e,"status");return typeof t=="number"?t:nt(nt(e,"response"),"status")},zs=e=>{const t=nt(e,"code"),s=Ls(e),n=e instanceof Error?e.message:"",i=[t,n].filter(v=>typeof v=="string").join(" ").toLowerCase(),u=globalThis.navigator?.onLine===!1||/network|fetch|timeout|offline|connection|网络|连接|超时/.test(i),h=typeof s=="number"&&s>=500||/server|service|服务器|服务异常/.test(i);return u?{actionLabel:"重新连接",description:"请检查网络后再试。",kind:"network",label:"网络连接",title:"网络连接不可用"}:h?{actionLabel:"重新加载",description:"服务暂时未能响应,请稍后重试。",kind:"service",label:"服务异常",title:"服务暂时不可用"}:{actionLabel:"重新加载",description:"请稍后重试;若问题持续出现,请联系管理员。",kind:"unknown",label:"加载异常",title:"暂时无法加载对话"}},Ot=e=>{try{const t=e?.return?.();if(!t)return;Promise.resolve(t).catch(s=>{console.error("[make-ai-assistant] transport iterator close failed",{errorType:s instanceof Error?s.name:typeof s})})}catch(t){console.error("[make-ai-assistant] transport iterator close failed",{errorType:t instanceof Error?t.name:typeof t})}},Ds=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 t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.style.position="fixed",t.style.inset="0 auto auto 0",t.style.opacity="0",document.body.append(t),t.select();const s=document.execCommand("copy");if(t.remove(),!s)throw new Error("Clipboard copy failed")},it=({className:e=""})=>a.jsx("span",{className:`make-ai-assistant__avatar ${e}`.trim(),"aria-hidden":"true",children:a.jsx(ya,{"aria-hidden":"true"})}),Ps=({src:e})=>e?a.jsx("span",{className:"make-ai-assistant__user-avatar","aria-hidden":"true",children:a.jsx("img",{alt:"",src:e})}):null,Os=({userAvatarUrl:e,userName:t})=>{const s=t?.trim();return!s&&!e?null:a.jsxs("div",{className:"make-ai-assistant__message-identity",children:[s?a.jsx("span",{className:"make-ai-assistant__message-sender",children:s}):null,a.jsx(Ps,{src:e})]})},vt=e=>{const t=e.trim();if(!(!t.startsWith("|")||!t.endsWith("|")))return t.slice(1,-1).split("|").map(s=>s.trim())},Us=e=>e.length>0&&e.every(t=>/^:?-{3,}:?$/.test(t)),Fs=(e,t)=>{const s=vt(e[t]??""),n=vt(e[t+1]??"");if(!s||!n||s.length!==n.length||!Us(n))return;const i=[];let o=t+2;for(;o<e.length;){const u=vt(e[o]??"");if(!u||u.length!==s.length)break;i.push(u),o+=1}return{headers:s,lastIndex:o-1,rows:i}},qs=e=>{const t=[],s=[],n=[],i=[],o=[],u=e.replace(/\r\n?/g,`
|
|
2
2
|
`).split(`
|
|
3
|
-
`)
|
|
4
|
-
`).trim();s.length=0,
|
|
5
|
-
`).trim();r.length=0,v&&t.push({type:"pre",text:v})};for(let v=0;v<l.length;v+=1){const f=l[v]??"",A=f.trim();if(!A){d(),m(),y();continue}const N=Fs(l,v);if(N){d(),m(),y(),t.push({headers:N.headers,rows:N.rows,type:"table"}),v=N.lastIndex;continue}const E=/^(#{1,6})\s+(.+)$/.exec(A);if(E){d(),m(),y();const D=(E[2]??"").replace(/\s+#+\s*$/,"").trim();D&&t.push({type:"heading",level:E[1]?.length,text:D});continue}if(/^\s*\|.+\|\s*$/.test(f)){d(),m(),r.push(f.trim());continue}const g=/^\s*[-*]\s+(.+)$/.exec(f);if(g){d(),y(),n.push(g[1]?.trim()??"");continue}m(),y(),s.push(A)}return d(),m(),y(),t},Ge=e=>{const t=[],s=/(\*\*[^*]+\*\*|`[^`]+`)/g;let n=0;for(const r of e.matchAll(s)){const l=r[0],d=r.index??0;d>n&&t.push(e.slice(n,d)),l.startsWith("**")?t.push(a.jsx("strong",{children:l.slice(2,-2)},`${d}-strong`)):t.push(a.jsx("code",{children:l.slice(1,-1)},`${d}-code`)),n=d+l.length}return n<e.length&&t.push(e.slice(n)),t},Ut=({content:e})=>{const t=qs(e);return t.length?a.jsx("div",{className:"make-ai-assistant__bubble make-ai-assistant__assistant-text",children:t.map((s,n)=>{if(s.type==="heading"){const r=s.level<=2?"h3":"h4";return a.jsx(r,{className:`make-ai-assistant__markdown-heading make-ai-assistant__markdown-heading--${s.level}`,children:Ge(s.text)},`${n}-heading`)}return s.type==="paragraph"?a.jsx("p",{children:Ge(s.text)},`${n}-paragraph`):s.type==="pre"?a.jsx("pre",{children:a.jsx("code",{children:s.text})},`${n}-pre`):s.type==="table"?a.jsx("div",{"aria-label":"表格内容,可横向滚动",className:"make-ai-assistant__markdown-table-scroll",role:"region",tabIndex:0,children:a.jsxs("table",{className:"make-ai-assistant__markdown-table",children:[a.jsx("thead",{children:a.jsx("tr",{children:s.headers.map((r,l)=>a.jsx("th",{scope:"col",children:Ge(r)},`${l}-${r}`))})}),a.jsx("tbody",{children:s.rows.map((r,l)=>a.jsx("tr",{children:r.map((d,m)=>a.jsx("td",{children:Ge(d)},`${m}-${d}`))},`${l}-${r.join("|")}`))})]})},`${n}-table`):a.jsx("ul",{children:s.items.map((r,l)=>a.jsx("li",{children:Ge(r)},`${l}-${r}`))},`${n}-list`)})}):null},Ia=({assistantName:e})=>a.jsxs("div",{className:"make-ai-assistant__message-identity",children:[a.jsx(lt,{className:"make-ai-assistant__avatar--message"}),a.jsx("span",{className:"make-ai-assistant__message-sender",children:e})]}),Aa=e=>{for(let t=e.messages.length-1;t>=0;t-=1){const s=e.messages[t];if(s.role==="assistant"&&s.status==="streaming")return s.id}},Hs=e=>{for(let t=e.messages.length-1;t>=0;t-=1)if(e.messages[t].role==="user")return t;return-1},Na=e=>{const t=Hs(e);if(!(t<0))for(let s=e.messages.length-1;s>t;s-=1){const n=e.messages[s];if(n.role==="assistant")return n.id}},Ks=e=>{if(e.status==="idle")for(let t=e.messages.length-1;t>=0;t-=1){const s=e.messages[t];if(s.role==="assistant"&&s.status==="complete")return s.id}},Vs=e=>{for(let t=e.messages.length-1;t>=0;t-=1){const s=e.messages[t];if(s.role==="user")return s}},Bs=(e,t)=>{const s=e.messages.findIndex(n=>n.id===t&&n.role==="user");return{...e,error:void 0,progress:void 0,status:"streaming",messages:s<0?e.messages:e.messages.slice(0,s+1)}},Ws=e=>e.scrollHeight-e.scrollTop-e.clientHeight<=48,Ft=(e="smooth")=>globalThis.matchMedia?.("(prefers-reduced-motion: reduce)").matches?"auto":e,yt=(e,t)=>{typeof e.scrollTo=="function"?e.scrollTo({top:e.scrollHeight,behavior:t}):e.scrollTop=e.scrollHeight},Ca=({error:e,onRetry:t})=>a.jsxs("div",{className:"make-ai-assistant__message-status make-ai-assistant__message-status--error","data-error-presentation":"request-failed",role:"alert",children:[a.jsxs("div",{className:"make-ai-assistant__message-status-header",children:[a.jsx("span",{className:"make-ai-assistant__message-status-icon","aria-hidden":"true",children:a.jsx(Qa,{"aria-hidden":"true"})}),a.jsx("strong",{children:"请求未完成"})]}),a.jsx("span",{className:"make-ai-assistant__message-status-message",children:e.message}),e.retryable&&t?a.jsxs("button",{className:"make-ai-assistant__retry",type:"button",onClick:t,children:[a.jsx(dt,{"aria-hidden":"true"}),"重新发送"]}):null]}),Xs=({error:e,onRetry:t})=>{const s=zs(e);return a.jsxs("section",{"aria-live":"assertive",className:"make-ai-assistant__load-failure","data-load-failure-kind":s.kind,role:"alert",children:[a.jsx("span",{className:"make-ai-assistant__load-failure-icon","aria-hidden":"true",children:a.jsx(es,{"aria-hidden":"true"})}),a.jsxs("div",{className:"make-ai-assistant__load-failure-copy",children:[a.jsx("span",{className:"make-ai-assistant__load-failure-label",children:s.label}),a.jsx("h3",{children:s.title}),a.jsx("p",{children:s.description})]}),a.jsxs("button",{className:"make-ai-assistant__retry make-ai-assistant__retry--primary",type:"button",onClick:t,children:[a.jsx(dt,{"aria-hidden":"true"}),s.actionLabel]})]})},Sa=({active:e,steps:t})=>{const[s,n]=c.useState(!1);if(!e||!t?.length)return null;const r=t[t.length-1]??"处理中";return a.jsxs("details",{className:"make-ai-assistant__process",open:s,onToggle:l=>n(l.currentTarget.open),children:[a.jsxs("summary",{"aria-label":`查看处理过程,共 ${t.length} 步`,children:[a.jsxs("span",{className:"make-ai-assistant__process-summary",children:[a.jsx("span",{className:"make-ai-assistant__process-indicator","aria-hidden":"true"}),a.jsxs("span",{className:"make-ai-assistant__process-copy",children:[a.jsx("span",{className:"make-ai-assistant__process-title",children:"处理过程"}),a.jsx("span",{className:"make-ai-assistant__progress make-ai-assistant__process-latest",role:"status",children:r})]})]}),a.jsxs("span",{className:"make-ai-assistant__process-count",children:[t.length," 步"]})]}),a.jsx("ol",{children:t.map((l,d)=>a.jsxs("li",{"data-step-active":d===t.length-1?!0:void 0,children:[a.jsx("span",{"aria-hidden":"true"}),a.jsx("span",{children:l})]},`${d}-${l}`))})]})},Gs=({copyFeedback:e,feedback:t,onCopy:s,onRegenerate:n})=>!t&&!s&&!n?null:a.jsxs("div",{className:"make-ai-assistant__reply-actions","aria-label":"回复操作",children:[s?a.jsx("button",{"aria-label":"复制回答",className:"make-ai-assistant__reply-action make-ai-assistant__reply-copy","data-tooltip":"复制",type:"button",onClick:s,children:a.jsx(ts,{"aria-hidden":"true",className:"make-ai-assistant__reply-copy-icon"})}):null,t,n?a.jsx("button",{"aria-label":"重新生成",className:"make-ai-assistant__reply-action make-ai-assistant__reply-regenerate","data-tooltip":"重新生成",type:"button",onClick:n,children:a.jsx(dt,{"aria-hidden":"true"})}):null,e?a.jsx("span",{className:"make-ai-assistant__reply-feedback","data-copy-status":e.status,role:"status",children:e.message}):null]}),qt=({assistantName:e,error:t,onRetry:s,progress:n})=>{const r=t?"error":"progress";return t?.message??n?.message?a.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:a.jsxs("div",{className:"make-ai-assistant__message-turn",children:[a.jsx(Ia,{assistantName:e}),a.jsx("div",{className:"make-ai-assistant__message-stack",children:t?a.jsx(Ca,{error:t,onRetry:s}):a.jsx(Sa,{active:!0,steps:n?.steps})})]})}):null},Zs=(e,t,s,n,r,l,d,m,y,v,f,A,N,E,g,D)=>{const R=Na(e),P=Aa(e),b=Ks(e);let h;return e.messages.map(i=>{if(i.intermediate)return a.jsxs("details",{className:"make-ai-assistant__process",children:[a.jsx("summary",{children:"处理过程"}),a.jsx(Ut,{content:i.content})]},i.id);const _=i.role==="assistant",C=h;_||(h=i);const B=i.id===P,I=i.id===R?e.error:void 0,W=i.error??I,Y=!_&&!!(y?.trim()||v),se=_?d:y?.trim()||"用户",G=_&&i.status==="complete"&&!W&&(i.content.trim()||i.id===b),ce=!!(g&&D?.features?.feedback&&_&&i.persistent),me=G||ce;return a.jsx("article",{"aria-label":`${se}的消息`,className:`make-ai-assistant__message make-ai-assistant__message--${i.role}`,"data-message-role":i.role,"data-message-state":W?"error":void 0,"data-message-status":i.status,"data-message-has-identity":_||Y?!0:void 0,children:a.jsxs("div",{className:"make-ai-assistant__message-turn",children:[_?a.jsx(Ia,{assistantName:d}):Y?a.jsx(Ps,{userAvatarUrl:v,userName:y}):null,a.jsxs("div",{className:"make-ai-assistant__message-stack",children:[_&&i.responseId&&e.responses?.[i.responseId]?.status==="cancelled"?a.jsx("p",{className:"make-ai-assistant__response-status",role:"status",children:"已停止生成"}):null,i.content?_?a.jsx(Ut,{content:i.content}):a.jsx("div",{className:"make-ai-assistant__bubble",children:i.content}):i.status==="streaming"?a.jsxs("div",{className:"make-ai-assistant__typing","aria-label":`${d}正在思考`,children:[a.jsx("span",{}),a.jsx("span",{}),a.jsx("span",{})]}):null,_?a.jsx(Sa,{active:B&&e.status==="streaming",steps:i.progressSteps}):null,W?a.jsx(Ca,{error:W,onRetry:I?m:void 0}):null,i.artifacts.map(je=>a.jsx(Vt,{artifact:je,context:t,onAction:r,onActionError:l,registry:s,theme:n},je.id)),g&&D&&e.threadId?a.jsx(ks,{message:i,context:t,transport:D,chatId:e.threadId}):null,me?a.jsx(Gs,{copyFeedback:f?.messageId===i.id?{message:f.message,status:f.status}:void 0,onCopy:i.content.trim()?()=>N(i.id,i.content):void 0,feedback:g&&ce?a.jsx(ys,{message:i,manager:g}):void 0,onRegenerate:A&&i.id===b&&C?()=>E({userMessage:C,assistantMessage:i}):void 0}):null]})]})},`${e.threadId??"local"}:${i.id}`)})};function Ma({assistantName:e="AI 助手",brandName:t,context:s,onAction:n,onActionError:r,onClose:l,onNewConversation:d,onToggleFullscreen:m,headerHeight:y,isFullscreen:v=!1,registry:f,suggestions:A,title:N,theme:E,transport:g,userAvatarUrl:D,userName:R,visible:P}){const b=fs(s,g),h=ws(s,g,b),i=wa(t,N),_=$s(y),C=kt(E),B=C||_?{...C,..._?{"--make-ai-internal-header-height":_}:{}}:void 0,[I,W]=c.useState(""),[Y,se]=c.useState(!1),[G,ce]=c.useState(!1),me=b.enabled?g.scopeKey?.(s)??s.app.id:"";c.useLayoutEffect(()=>{b.enabled&&W("")},[me,b.enabled]);const[je,Pe]=c.useState(w.createAssistantConversationState),U=b.enabled?b.state:je,K=b.enabled?b.setState:Pe,O=c.useRef(U);O.current=U;const[J,re]=c.useState(void 0),[pe,le]=c.useState(void 0),[we,z]=c.useState(0),[te,Q]=c.useState(()=>g.loadConversation?"loading":"ready"),ee=b.enabled?b.loading&&!U.messages.length?"loading":"ready":te,[Ue,Fe]=c.useState(void 0),[Je,ie]=c.useState(!1),X=c.useRef(void 0),oe=c.useRef(void 0),ge=c.useRef(0),Ie=c.useRef(null),ke=c.useRef(null),Se=c.useRef(null),Me=c.useRef(null),qe=c.useRef(null),He=c.useRef(null),he=c.useRef(!0),Ye=c.useRef(s.app.id),Qe=c.useRef(P),et=c.useId();c.useLayoutEffect(()=>{const p=Se.current;p&&(p.style.height="auto",p.style.height=`${Math.min(Math.max(p.scrollHeight,Ms),Es)}px`)},[I]);const tt=c.useMemo(()=>f??Gt(),[f]),at=c.useMemo(()=>Ts(A),[A]),Ee=p=>{const H=X.current,V=oe.current?.iterator;return!H&&!V?!1:(ge.current+=1,X.current=void 0,oe.current=void 0,console.info("[make-ai-assistant] local run cancellation requested",{reason:p}),H?.abort(),Pt(V),!0)};c.useEffect(()=>()=>{Ee("unmount")},[]),c.useEffect(()=>{if(b.enabled)return;const p=g.loadConversation,H=Ye.current!==s.app.id;if(Ye.current=s.app.id,Ee("reinitialize"),H&&(W(""),he.current=!0),re(void 0),le(void 0),ie(!1),K(w.createAssistantConversationState()),!p){Fe(void 0),Q("ready");return}const V=new AbortController;return Fe(void 0),Q("loading"),console.info("[make-ai-assistant] conversation load start",{appId:s.app.id}),p.call(g,s,{signal:V.signal}).then(ae=>{V.signal.aborted||(K(w.createAssistantConversationState(ae)),Q("ready"),console.info("[make-ai-assistant] conversation load success",{appId:s.app.id,messageCount:ae.messages.length}))}).catch(ae=>{V.signal.aborted||(console.error("[make-ai-assistant] conversation load failed",{appId:s.app.id,errorType:ae instanceof Error?ae.name:typeof ae}),Fe(ae),Q("error"))}),()=>V.abort()},[s.app.id,we,g,b.enabled]),c.useEffect(()=>{const p=ke.current;if(!p||!he.current)return;ie(!1);const H=requestAnimationFrame(()=>{if(!he.current)return;const V=U.status==="streaming"||globalThis.matchMedia?.("(prefers-reduced-motion: reduce)").matches?"auto":"smooth";yt(p,V)});return()=>cancelAnimationFrame(H)},[U.messages,U.progress,U.status]),c.useEffect(()=>{P||(se(!1),ce(!1))},[P]),c.useEffect(()=>{const p=P&&!Qe.current;if(Qe.current=P,!p)return;const H=requestAnimationFrame(()=>{const V=ke.current;if(V&&he.current){ie(!1);const Ve=O.current.status==="streaming"?"auto":Ft();yt(V,Ve)}else V&&ie(O.current.messages.length>0);const ae=Se.current;(ae&&!ae.disabled?ae:He.current??Ie.current?.querySelector("button:not(:disabled)"))?.focus()});return()=>cancelAnimationFrame(H)},[P]);const Ke=()=>{const p=ke.current;if(!p)return;const H=Ws(p);he.current=H,ie(!H&&O.current.messages.length>0)},Ae=()=>{const p=ke.current;if(!p)return;he.current=!0,ie(!1);const H=Ft();yt(p,H)},o=async(p,H)=>{const V=p.trim(),ae=O.current,ye=H?.regenerateFrom,Ve=g.regenerate;if(!V||ee!=="ready"||ae.status==="streaming"||X.current||ye&&!Ve)return;if(w.countCodePointsUpTo(V,w.MAKE_AI_CONVERSATION_LIMITS.messageCharacters)>w.MAKE_AI_CONVERSATION_LIMITS.messageCharacters){re(`输入内容过长,请控制在 ${w.MAKE_AI_CONVERSATION_LIMITS.messageCharacters} 个字符以内`);return}const nt={id:ye?.userMessage.id??Ns("user"),content:V},rt=ye?Bs(ae,ye.userMessage.id):w.appendUserMessage(ae,nt),it=new AbortController,Re=ge.current+1;ge.current=Re,X.current=it,re(void 0),le(void 0),ie(!he.current&&ae.messages.length>0),ye||W(""),K(rt);try{let _e=!1,ne,xt=0,jt=0,wt=0,ut=0,Be=0;const We=new Map,It=new Set,At=new Set([...rt.messages.map(ot=>ot.id),nt.id]),Xe=new Set,Nt=xe.createArtifactCapabilities(tt),Ct={signal:it.signal};let mt;if(ye){if(!Ve)throw new Z("当前 AI 助手不支持重新生成");mt=Ve({threadId:rt.threadId,message:nt,assistantMessage:{id:ye.assistantMessage.id,content:ye.assistantMessage.content},context:s,capabilities:Nt},Ct)}else mt=g.run({threadId:rt.threadId,message:nt,context:s,capabilities:Nt},Ct);const St=mt[Symbol.asyncIterator]();for(oe.current={iterator:St,requestVersion:Re};;){const ot=await St.next();if(ge.current!==Re||ot.done)break;let L;try{L=w.parseAssistantEvent(ot.value)}catch(ue){throw new Z(ue instanceof Error?ue.message:"Invalid assistant event")}if(L.type==="message.start"){if(ne!==void 0&&ne!==L.runId)throw new Z("AI 助手响应 run id 不一致");if(ne??=L.runId,jt+=1,jt>w.MAKE_AI_CONVERSATION_LIMITS.assistantMessagesPerRun)throw new Z("AI 助手单次响应消息数量超过限制");if(At.has(L.messageId))throw new Z("AI 助手响应包含重复的 message id");At.add(L.messageId),Xe.add(L.messageId),We.set(L.messageId,0)}if(L.type==="message.delta"){if(!Xe.has(L.messageId))throw new Z("AI 助手响应事件顺序无效");const ue=We.get(L.messageId)??0,$e=w.countCodePointsUpTo(L.delta,w.MAKE_AI_CONVERSATION_LIMITS.messageCharacters-Be);if(Be+$e>w.MAKE_AI_CONVERSATION_LIMITS.messageCharacters)throw new Z("AI 助手响应文本超过大小限制");Be+=$e,We.set(L.messageId,ue+$e)}if(L.type==="message.replace"){if(!Xe.has(L.messageId))throw new Z("AI 助手响应事件顺序无效");const ue=We.get(L.messageId)??0,$e=w.countCodePointsUpTo(L.content,w.MAKE_AI_CONVERSATION_LIMITS.messageCharacters),Mt=Be-ue+$e;if(Mt>w.MAKE_AI_CONVERSATION_LIMITS.messageCharacters)throw new Z("AI 助手响应文本超过大小限制");Be=Mt,We.set(L.messageId,$e)}if(L.type==="run.progress"){if(ne!==void 0&&ne!==L.runId)throw new Z("AI 助手响应 run id 不一致");if(ne??=L.runId,wt+=1,wt>w.MAKE_AI_CONVERSATION_LIMITS.progressStepsPerRun)throw new Z("AI 助手处理过程数量超过限制");const ue=w.countCodePointsUpTo(L.message,w.MAKE_AI_CONVERSATION_LIMITS.progressCharactersPerRun-ut);if(ut+ue>w.MAKE_AI_CONVERSATION_LIMITS.progressCharactersPerRun)throw new Z("AI 助手处理过程文本超过大小限制");ut+=ue}if(L.type==="artifact"){if(!Xe.has(L.messageId))throw new Z("AI 助手响应事件顺序无效");if(xt+=1,xt>w.MAKE_AI_CONVERSATION_LIMITS.artifactsPerRun)throw new Z("AI 助手单次响应 Artifact 数量超过限制");if(It.has(L.artifact.id))throw new Z("AI 助手响应包含重复的 Artifact id");It.add(L.artifact.id)}if(L.type==="message.complete"&&!Xe.delete(L.messageId))throw new Z("AI 助手响应事件顺序无效");if(L.type==="run.complete"&&ne!==void 0&&ne!==L.runId)throw new Z("AI 助手响应 run id 不一致");if(L.type==="run.cancelled"&&L.runId!==void 0&&ne!==void 0&&ne!==L.runId)throw new Z("AI 助手响应 run id 不一致");if(K(ue=>w.reduceAssistantEvent(ue,L)),L.type==="error"||L.type==="run.cancelled"||L.type==="run.complete"){_e=!0;break}}if(!_e)throw new Z("AI 助手流式响应在终止事件前结束")}catch(_e){if(ge.current!==Re)return;if(it.signal.aborted){K(ne=>w.reduceAssistantEvent(ne,{type:"run.cancelled"}));return}console.error("[make-ai-assistant] assistant run failed",{appId:s.app.id,errorType:_e instanceof Error?_e.name:typeof _e}),K(ne=>w.reduceAssistantEvent(ne,{type:"error",code:"TRANSPORT_ERROR",message:_e instanceof Z?_e.message:"连接失败,请重试",retryable:!0}))}finally{ge.current===Re&&X.current===it&&(X.current=void 0),oe.current?.requestVersion===Re&&(Pt(oe.current.iterator),oe.current=void 0)}},u=p=>{if(b.enabled){if(h.pending)return re("请等待附件上传完成,或移除失败的附件"),Promise.resolve();const H=p.trim(),V=h.parts.length?[...H?[{id:ze(),kind:"text",text:H}]:[],...h.parts]:void 0;return W(""),h.clear(),b.send(H,V)}return o(p)},k=p=>o(p.userMessage.content,{regenerateFrom:p}),x=async(p,H)=>{try{await Ds(H),le({messageId:p,message:"已复制",status:"success"})}catch(V){console.error("[make-ai-assistant] copy answer failed",{errorType:V instanceof Error?V.name:typeof V}),le({messageId:p,message:"复制失败",status:"error"})}},S=p=>{p.preventDefault(),u(I)},$=p=>{p.key==="Enter"&&!p.shiftKey&&!p.nativeEvent.isComposing&&(p.preventDefault(),u(I))},j=()=>{if(b.enabled){b.stop();return}Ee("stop")&&K(p=>w.reduceAssistantEvent(p,{type:"run.cancelled"}))},T=()=>{if(ce(!1),b.enabled){W(""),b.create(),d?.();return}Ee("new-conversation"),W(""),re(void 0),le(void 0),ie(!1),he.current=!0,K(w.createAssistantConversationState()),d?.()},M=b.enabled&&b.cancelling.length?"停止中":g.features?.remoteCancellation===!1?"停止接收":"停止生成",F=Aa(U),ve=Na(U),Ne=Vs(U),st=typeof g.regenerate=="function"&&g.features?.regeneration!==!1,de=()=>{if(b.enabled){b.retry();return}Ne&&u(Ne.content)},Te=p=>{if(p.key==="Escape"&&!(!Y&&!G)){if(p.preventDefault(),p.stopPropagation(),Y){se(!1),Me.current?.focus();return}ce(!1),qe.current?.focus()}};return a.jsxs("section",{className:`make-ai-assistant make-ai-assistant__panel${b.enabled?" make-ai-assistant__panel--managed":""}`,ref:Ie,style:B,onKeyDown:Te,onDragOver:p=>{h.enabled&&p.dataTransfer.types.includes("Files")&&p.preventDefault()},onDrop:p=>{h.enabled&&p.dataTransfer.files.length&&(p.preventDefault(),h.add(Array.from(p.dataTransfer.files)))},children:[a.jsxs("header",{className:"make-ai-assistant__header",children:[a.jsx("div",{className:"make-ai-assistant__header-leading",children:b.enabled?a.jsxs("button",{"aria-controls":et,"aria-expanded":G,"aria-haspopup":"dialog","aria-label":"任务列表",className:"make-ai-assistant__task-list-trigger",ref:qe,type:"button",onClick:()=>ce(p=>!p),children:[a.jsx(as,{"aria-hidden":"true",className:"make-ai-assistant__task-list-icon"}),a.jsx("span",{className:"make-ai-assistant__task-list-label",children:"任务列表"}),G?a.jsx(Ya,{"aria-hidden":"true",className:"make-ai-assistant__task-list-disclosure"}):a.jsx(Ja,{"aria-hidden":"true",className:"make-ai-assistant__task-list-disclosure"})]}):null}),a.jsxs("div",{className:"make-ai-assistant__header-center",children:[a.jsx(lt,{}),a.jsx("h2",{className:"make-ai-assistant__header-title",title:i,children:i})]}),a.jsxs("div",{className:"make-ai-assistant__header-actions",children:[m?a.jsx("button",{"aria-label":v?"退出全屏":"全屏显示","aria-pressed":v,className:"make-ai-assistant__icon-button",title:v?"退出全屏":"全屏显示",type:"button",onClick:m,children:v?a.jsx(rs,{"aria-hidden":"true",className:"make-ai-assistant__icon-button-icon"}):a.jsx(ss,{"aria-hidden":"true",className:"make-ai-assistant__icon-button-icon"})}):null,g.features?.newConversation!==!1?a.jsx("button",{"aria-label":"新建对话",className:"make-ai-assistant__icon-button",type:"button",onClick:T,children:a.jsx(_t,{"aria-hidden":"true",className:"make-ai-assistant__icon-button-icon"})}):null,l?a.jsx("button",{"aria-label":`关闭 ${i}`,className:"make-ai-assistant__icon-button",type:"button",onClick:l,children:a.jsx(Ze,{"aria-hidden":"true",className:"make-ai-assistant__icon-button-icon"})}):null]})]}),b.enabled&&G?a.jsx(vs,{id:et,manager:b,triggerRef:qe,onDismiss:()=>ce(!1),onNewConversation:g.features?.newConversation!==!1?T:void 0}):null,a.jsxs("div",{className:"make-ai-assistant__body","aria-live":"polite","aria-relevant":"additions text",ref:ke,role:"log",onScroll:Ke,children:[ee==="loading"?a.jsxs("div",{className:"make-ai-assistant__empty",role:"status",children:[a.jsx(lt,{}),a.jsx("h3",{children:"正在恢复对话"}),a.jsx("p",{children:"正在读取当前 App 的历史消息…"})]}):ee==="error"?a.jsx("div",{className:"make-ai-assistant__empty",children:a.jsx(Xs,{error:Ue,onRetry:()=>z(p=>p+1)})}):U.messages.length===0?a.jsxs("div",{className:"make-ai-assistant__empty",children:[a.jsx(lt,{}),a.jsx("h3",{children:"有什么可以帮你?"}),a.jsx("p",{children:"我会结合当前 App、页面位置和宿主允许的上下文回答,并把过程与结果分开展示。"})]}):Zs(U,s,tt,E,n,r,e,Ne?de:void 0,R,D,pe,st,(p,H)=>{x(p,H)},p=>{k(p)},b.enabled?b:void 0,g),U.progress&&!F?a.jsx(qt,{assistantName:e,progress:U.progress}):null,U.error&&!ve?a.jsx(qt,{assistantName:e,error:U.error,onRetry:Ne?de:void 0}):null]}),Je?a.jsx("button",{"aria-label":"回到最新消息",className:"make-ai-assistant__back-to-latest",type:"button",onClick:Ae,children:a.jsx(Ga,{"aria-hidden":"true"})}):null,a.jsxs("footer",{className:"make-ai-assistant__composer-region",children:[ee==="ready"&&at.length>0&&U.messages.length===0?a.jsx("div",{className:"make-ai-assistant__suggestions","aria-label":"推荐问题",children:at.map((p,H)=>a.jsx("button",{type:"button",onClick:()=>{u(p)},children:p},`${H}-${p}`))}):null,a.jsxs("form",{className:"make-ai-assistant__composer",onSubmit:S,children:[h.enabled?a.jsx(As,{attachments:h,visible:P}):null,a.jsx("textarea",{"aria-label":`向 ${e} 提问`,"aria-describedby":J?"make-ai-composer-error":void 0,"aria-invalid":J?!0:void 0,autoFocus:!0,disabled:ee!=="ready"||!b.enabled&&U.status==="streaming",placeholder:`询问当前 ${s.app.name??"App"} 中的数据…`,ref:Se,rows:2,value:I,onChange:p=>{W(p.currentTarget.value),re(void 0)},onKeyDown:$,onPaste:p=>{!h.enabled||!p.clipboardData.files.length||(p.preventDefault(),h.add(Array.from(p.clipboardData.files)))}}),a.jsxs("div",{className:"make-ai-assistant__composer-toolbar",children:[h.enabled?a.jsx(Is,{attachments:h,open:Y,triggerRef:Me,onOpenChange:se}):null,a.jsxs("div",{className:"make-ai-assistant__composer-actions",children:[U.status==="streaming"?a.jsx("button",{"aria-label":M,className:"make-ai-assistant__send make-ai-assistant__send--stop","data-tooltip":M,ref:He,disabled:b.enabled&&b.cancelling.includes(U.activeRunId??""),type:"button",onClick:j,children:a.jsx("span",{"aria-hidden":"true"})}):a.jsx("button",{"aria-label":"发送",className:"make-ai-assistant__send",disabled:ee!=="ready"||h.pending||!I.trim()&&!h.parts.length,type:"submit",children:a.jsx(Rt,{"aria-hidden":"true"})}),b.enabled&&U.status==="streaming"?a.jsx("button",{"aria-label":"发送",className:"make-ai-assistant__send",disabled:b.busy||h.pending||!I.trim()&&!h.parts.length,type:"submit",children:a.jsx(Rt,{"aria-hidden":"true"})}):null]})]})]}),J?a.jsx("p",{id:"make-ai-composer-error",role:"alert",children:J}):null,a.jsx("p",{children:"AI 生成的结果可能存在偏差,重要数据请核对明细。"})]})]})}function Js(e){return a.jsx(Ma,{...e,visible:!0})}function Ys({defaultOpen:e=!1,hideLauncher:t=!1,launcher:s,launcherPosition:n="bottom-right",maxDrawerWidth:r,onOpenChange:l,open:d,...m}){const y=wa(m.brandName,m.title),[v,f]=c.useState(e),[A,N]=c.useState(()=>e||d===!0),[E,g]=c.useState(!1),D=c.useRef(null),R=d??v,P=kt(m.theme),b=Rs(r),h=b===void 0?void 0:{"--make-ai-internal-drawer-max-width":`${b}px`},i=C=>{d===void 0&&f(C),l?.(C),C||(g(!1),requestAnimationFrame(()=>D.current?.focus()))},_=()=>i(!R);return c.useEffect(()=>{R&&N(!0)},[R]),c.useEffect(()=>{if(!R)return;const C=B=>{if(B.key==="Escape"){if(E){g(!1);return}i(!1),requestAnimationFrame(()=>D.current?.focus())}};return document.addEventListener("keydown",C),()=>document.removeEventListener("keydown",C)},[E,l,R]),a.jsxs("div",{className:"make-ai-assistant","data-open":R||void 0,style:P,children:[!t&&(!R||s)?s?s({open:R,toggle:_}):a.jsxs("button",{"aria-label":R?`关闭 ${y}`:`打开 ${y}`,"aria-expanded":R,className:"make-ai-assistant__launcher","data-launcher-position":n,ref:D,type:"button",onClick:_,children:[a.jsx("span",{className:"make-ai-assistant__launcher-orbit","aria-hidden":"true"}),a.jsx(va,{"aria-hidden":"true"})]}):null,A?a.jsx("aside",{"aria-label":y,"aria-modal":"false",className:`make-ai-assistant__drawer${E?" make-ai-assistant__drawer--fullscreen":""}`,hidden:!R,role:"dialog",style:h,children:a.jsx(Ma,{...m,isFullscreen:E,onClose:()=>i(!1),onToggleFullscreen:()=>g(C=>!C),visible:R})}):null]})}exports.createArtifactCapabilities=xe.createArtifactCapabilities;exports.createArtifactTemplateRegistry=xe.createArtifactTemplateRegistry;exports.extendArtifactTemplateRegistry=xe.extendArtifactTemplateRegistry;exports.resolveArtifactTemplate=xe.resolveArtifactTemplate;exports.MAKE_AI_ARTIFACT_KINDS=w.MAKE_AI_ARTIFACT_KINDS;exports.MAKE_AI_ARTIFACT_LIMITS=w.MAKE_AI_ARTIFACT_LIMITS;exports.MAKE_AI_ARTIFACT_SCHEMA_VERSION=w.MAKE_AI_ARTIFACT_SCHEMA_VERSION;exports.MAKE_AI_CONVERSATION_LIMITS=w.MAKE_AI_CONVERSATION_LIMITS;exports.appendUserMessage=w.appendUserMessage;exports.createAssistantConversationState=w.createAssistantConversationState;exports.parseArtifact=w.parseArtifact;exports.parseAssistantEvent=w.parseAssistantEvent;exports.reduceAssistantEvent=w.reduceAssistantEvent;exports.validateArtifact=w.validateArtifact;exports.ArtifactRenderer=Vt;exports.AssistantPanel=Js;exports.MakeAiAssistant=Ys;exports.createPlatformArtifactRegistry=Gt;exports.formatArtifactValue=be;exports.platformArtifactTemplates=Xt;
|
|
3
|
+
`);let h;const v=()=>{const w=s.join(`
|
|
4
|
+
`).trim();s.length=0,w&&t.push({type:"paragraph",text:w})},j=()=>{n.length&&t.push({type:"list",items:n.splice(0)})},f=()=>{const w=i.join(`
|
|
5
|
+
`).trim();i.length=0,w&&t.push({type:"pre",text:w})};for(let w=0;w<u.length;w+=1){const N=u[w]??"",A=/^ {0,3}(`{3,}|~{3,})(.*)$/.exec(N);if(h){A&&A[1]?.[0]===h.marker&&A[1].length>=h.length&&!A[2]?.trim()?(t.push({type:"pre",text:o.join(`
|
|
6
|
+
`)}),o.length=0,h=void 0):o.push(N);continue}if(A&&(A[1]?.[0]==="~"||!A[2]?.includes("`"))){v(),j(),f(),h={marker:A[1]?.[0]??"`",length:A[1]?.length??3};continue}const g=N.trim();if(!g){v(),j(),f();continue}const P=Fs(u,w);if(P){v(),j(),f(),t.push({headers:P.headers,rows:P.rows,type:"table"}),w=P.lastIndex;continue}const M=/^(#{1,6})\s+(.+)$/.exec(g);if(M){v(),j(),f();const _=(M[2]??"").replace(/\s+#+\s*$/,"").trim();_&&t.push({type:"heading",level:M[1]?.length,text:_});continue}if(/^\s*\|.+\|\s*$/.test(N)){v(),j(),i.push(N.trim());continue}const O=/^\s*[-*]\s+(.+)$/.exec(N);if(O){v(),f(),n.push(O[1]?.trim()??"");continue}j(),f(),s.push(g)}return v(),j(),f(),h&&t.push({type:"pre",text:o.join(`
|
|
7
|
+
`)}),t},Ge=e=>{const t=[],s=/(\*\*[^*]+\*\*|`[^`]+`)/g;let n=0;for(const i of e.matchAll(s)){const o=i[0],u=i.index??0;u>n&&t.push(e.slice(n,u)),o.startsWith("**")?t.push(a.jsx("strong",{children:o.slice(2,-2)},`${u}-strong`)):t.push(a.jsx("code",{children:o.slice(1,-1)},`${u}-code`)),n=u+o.length}return n<e.length&&t.push(e.slice(n)),t},Ut=({content:e})=>{const t=qs(e);return t.length?a.jsx("div",{className:"make-ai-assistant__bubble make-ai-assistant__assistant-text",children:t.map((s,n)=>{if(s.type==="heading"){const i=s.level<=2?"h3":"h4";return a.jsx(i,{className:`make-ai-assistant__markdown-heading make-ai-assistant__markdown-heading--${s.level}`,children:Ge(s.text)},`${n}-heading`)}return s.type==="paragraph"?a.jsx("p",{children:Ge(s.text)},`${n}-paragraph`):s.type==="pre"?a.jsx("pre",{"aria-label":"代码块,可横向滚动",role:"region",tabIndex:0,children:a.jsx("code",{children:s.text})},`${n}-pre`):s.type==="table"?a.jsx("div",{"aria-label":"表格内容,可横向滚动",className:"make-ai-assistant__markdown-table-scroll",role:"region",tabIndex:0,children:a.jsxs("table",{className:"make-ai-assistant__markdown-table",children:[a.jsx("thead",{children:a.jsx("tr",{children:s.headers.map((i,o)=>a.jsx("th",{scope:"col",children:Ge(i)},`${o}-${i}`))})}),a.jsx("tbody",{children:s.rows.map((i,o)=>a.jsx("tr",{children:i.map((u,h)=>a.jsx("td",{children:Ge(u)},`${h}-${u}`))},`${o}-${i.join("|")}`))})]})},`${n}-table`):a.jsx("ul",{children:s.items.map((i,o)=>a.jsx("li",{children:Ge(i)},`${o}-${i}`))},`${n}-list`)})}):null},Aa=({assistantName:e})=>a.jsxs("div",{className:"make-ai-assistant__message-identity",children:[a.jsx(it,{className:"make-ai-assistant__avatar--message"}),a.jsx("span",{className:"make-ai-assistant__message-sender",children:e})]}),Na=e=>{for(let t=e.messages.length-1;t>=0;t-=1){const s=e.messages[t];if(s.role==="assistant"&&s.status==="streaming")return s.id}},Hs=e=>{for(let t=e.messages.length-1;t>=0;t-=1)if(e.messages[t].role==="user")return t;return-1},Ca=e=>{const t=Hs(e);if(!(t<0))for(let s=e.messages.length-1;s>t;s-=1){const n=e.messages[s];if(n.role==="assistant")return n.id}},Ks=e=>{if(e.status==="idle")for(let t=e.messages.length-1;t>=0;t-=1){const s=e.messages[t];if(s.role==="assistant"&&s.status==="complete")return s.id}},Vs=e=>{for(let t=e.messages.length-1;t>=0;t-=1){const s=e.messages[t];if(s.role==="user")return s}},Bs=(e,t)=>{const s=e.messages.findIndex(n=>n.id===t&&n.role==="user");return{...e,error:void 0,progress:void 0,status:"streaming",messages:s<0?e.messages:e.messages.slice(0,s+1)}},Ws=e=>e.scrollHeight-e.scrollTop-e.clientHeight<=48,Ft=(e="smooth")=>globalThis.matchMedia?.("(prefers-reduced-motion: reduce)").matches?"auto":e,yt=(e,t)=>{typeof e.scrollTo=="function"?e.scrollTo({top:e.scrollHeight,behavior:t}):e.scrollTop=e.scrollHeight},Ma=({error:e,onRetry:t})=>a.jsxs("div",{className:"make-ai-assistant__message-status make-ai-assistant__message-status--error","data-error-presentation":"request-failed",role:"alert",children:[a.jsxs("div",{className:"make-ai-assistant__message-status-header",children:[a.jsx("span",{className:"make-ai-assistant__message-status-icon","aria-hidden":"true",children:a.jsx(ta,{"aria-hidden":"true"})}),a.jsx("strong",{children:"请求未完成"})]}),a.jsx("span",{className:"make-ai-assistant__message-status-message",children:e.message}),e.retryable&&t?a.jsxs("button",{className:"make-ai-assistant__retry",type:"button",onClick:t,children:[a.jsx(rt,{"aria-hidden":"true"}),"重新发送"]}):null]}),Xs=({error:e,onRetry:t})=>{const s=zs(e);return a.jsxs("section",{"aria-live":"assertive",className:"make-ai-assistant__load-failure","data-load-failure-kind":s.kind,role:"alert",children:[a.jsx("span",{className:"make-ai-assistant__load-failure-icon","aria-hidden":"true",children:a.jsx(es,{"aria-hidden":"true"})}),a.jsxs("div",{className:"make-ai-assistant__load-failure-copy",children:[a.jsx("span",{className:"make-ai-assistant__load-failure-label",children:s.label}),a.jsx("h3",{children:s.title}),a.jsx("p",{children:s.description})]}),a.jsxs("button",{className:"make-ai-assistant__retry make-ai-assistant__retry--primary",type:"button",onClick:t,children:[a.jsx(rt,{"aria-hidden":"true"}),s.actionLabel]})]})},Sa=({active:e,steps:t})=>{const[s,n]=l.useState(!1);if(!e||!t?.length)return null;const i=t[t.length-1]??"处理中";return a.jsxs("details",{className:"make-ai-assistant__process",open:s,onToggle:o=>n(o.currentTarget.open),children:[a.jsxs("summary",{"aria-label":`查看处理过程,共 ${t.length} 步`,children:[a.jsxs("span",{className:"make-ai-assistant__process-summary",children:[a.jsx("span",{className:"make-ai-assistant__process-indicator","aria-hidden":"true"}),a.jsxs("span",{className:"make-ai-assistant__process-copy",children:[a.jsx("span",{className:"make-ai-assistant__process-title",children:"处理过程"}),a.jsx("span",{className:"make-ai-assistant__progress make-ai-assistant__process-latest",role:"status",children:i})]})]}),a.jsxs("span",{className:"make-ai-assistant__process-count",children:[t.length," 步"]})]}),a.jsx("ol",{children:t.map((o,u)=>a.jsxs("li",{"data-step-active":u===t.length-1?!0:void 0,children:[a.jsx("span",{"aria-hidden":"true"}),a.jsx("span",{children:o})]},`${u}-${o}`))})]})},Gs=({copyFeedback:e,feedback:t,onCopy:s,onRegenerate:n})=>!t&&!s&&!n?null:a.jsxs("div",{className:"make-ai-assistant__reply-actions","aria-label":"回复操作",children:[s?a.jsx("button",{"aria-label":"复制回答",className:"make-ai-assistant__reply-action make-ai-assistant__reply-copy","data-tooltip":"复制",type:"button",onClick:s,children:a.jsx(ts,{"aria-hidden":"true",className:"make-ai-assistant__reply-copy-icon"})}):null,t,n?a.jsx("button",{"aria-label":"重新生成",className:"make-ai-assistant__reply-action make-ai-assistant__reply-regenerate","data-tooltip":"重新生成",type:"button",onClick:n,children:a.jsx(rt,{"aria-hidden":"true"})}):null,e?a.jsx("span",{className:"make-ai-assistant__reply-feedback","data-copy-status":e.status,role:"status",children:e.message}):null]}),qt=({assistantName:e,error:t,onRetry:s,progress:n})=>{const i=t?"error":"progress";return t?.message??n?.message?a.jsx("article",{"aria-label":`${e}的${i==="error"?"错误消息":"状态消息"}`,className:`make-ai-assistant__message make-ai-assistant__message--assistant make-ai-assistant__message--${i}`,"data-message-role":"assistant","data-message-state":i,children:a.jsxs("div",{className:"make-ai-assistant__message-turn",children:[a.jsx(Aa,{assistantName:e}),a.jsx("div",{className:"make-ai-assistant__message-stack",children:t?a.jsx(Ma,{error:t,onRetry:s}):a.jsx(Sa,{active:!0,steps:n?.steps})})]})}):null},Zs=(e,t,s,n,i,o,u,h,v,j,f,w,N,A,g,P)=>{const M=Ca(e),O=Na(e),_=Ks(e);let d;return e.messages.map(c=>{if(c.intermediate)return a.jsxs("details",{className:"make-ai-assistant__process",children:[a.jsx("summary",{children:"处理过程"}),a.jsx(Ut,{content:c.content})]},c.id);const k=c.role==="assistant",S=d;k||(d=c);const B=c.id===O,C=c.id===M?e.error:void 0,W=c.error??C,le=!k&&!!(v?.trim()||j),Q=k?u:v?.trim()||"用户",de=k&&c.status==="complete"&&!W&&(c.content.trim()||c.id===_),ae=!!(g&&P?.features?.feedback&&typeof P.setFeedback=="function"&&k&&c.persistent),ke=de||ae;return a.jsx("article",{"aria-label":`${Q}的消息`,className:`make-ai-assistant__message make-ai-assistant__message--${c.role}`,"data-message-role":c.role,"data-message-state":W?"error":void 0,"data-message-status":c.status,"data-message-has-identity":k||le?!0:void 0,children:a.jsxs("div",{className:"make-ai-assistant__message-turn",children:[k?a.jsx(Aa,{assistantName:u}):le?a.jsx(Os,{userAvatarUrl:j,userName:v}):null,a.jsxs("div",{className:"make-ai-assistant__message-stack",children:[k&&c.responseId&&e.responses?.[c.responseId]?.status==="cancelled"?a.jsx("p",{className:"make-ai-assistant__response-status",role:"status",children:"已停止生成"}):null,c.content?k?a.jsx(Ut,{content:c.content}):a.jsx("div",{className:"make-ai-assistant__bubble",children:c.content}):c.status==="streaming"?a.jsxs("div",{className:"make-ai-assistant__typing","aria-label":`${u}正在思考`,children:[a.jsx("span",{}),a.jsx("span",{}),a.jsx("span",{})]}):null,k?a.jsx(Sa,{active:B&&e.status==="streaming",steps:c.progressSteps}):null,W?a.jsx(Ma,{error:W,onRetry:C?h:void 0}):null,c.artifacts.map(re=>a.jsx(Vt,{artifact:re,context:t,onAction:i,onActionError:o,registry:s,theme:n},re.id)),g&&P&&e.threadId?a.jsx(ks,{message:c,context:t,transport:P,chatId:e.threadId}):null,ke?a.jsx(Gs,{copyFeedback:f?.messageId===c.id?{message:f.message,status:f.status}:void 0,onCopy:c.content.trim()?()=>N(c.id,c.content):void 0,feedback:g&&ae?a.jsx(ys,{message:c,manager:g}):void 0,onRegenerate:w&&c.id===_&&S?()=>A({userMessage:S,assistantMessage:c}):void 0}):null]})]})},`${e.threadId??"local"}:${c.id}`)})};function Ea({assistantName:e="AI 助手",brandName:t,context:s,onAction:n,onActionError:i,onClose:o,onNewConversation:u,onToggleFullscreen:h,headerHeight:v,isFullscreen:j=!1,registry:f,suggestions:w,title:N,theme:A,transport:g,userAvatarUrl:P,userName:M,visible:O}){const _=fs(s,g),d=ws(s,g,_),c=Ia(t,N),k=$s(v),S=kt(A),B=S||k?{...S,...k?{"--make-ai-internal-header-height":k}:{}}:void 0,[C,W]=l.useState(""),[le,Q]=l.useState(!1),[de,ae]=l.useState(!1),ke=_.enabled?g.scopeKey?.(s)??s.app.id:"";l.useLayoutEffect(()=>{_.enabled&&W("")},[ke,_.enabled]);const[re,ot]=l.useState(I.createAssistantConversationState),D=_.enabled?_.state:re,ue=_.enabled?_.setState:ot,oe=l.useRef(D);oe.current=D;const[Ie,fe]=l.useState(void 0),[Ee,X]=l.useState(void 0),[V,ee]=l.useState(0),[Ae,ce]=l.useState(()=>g.loadConversation?"loading":"ready"),ie=_.configurationError?"error":_.enabled?_.loading&&!D.messages.length?"loading":"ready":Ae,[Ne,R]=l.useState(void 0),[te,G]=l.useState(!1),Y=l.useRef(void 0),pe=l.useRef(void 0),_e=l.useRef(0),Fe=l.useRef(null),ge=l.useRef(null),J=l.useRef(null),be=l.useRef(null),qe=l.useRef(null),Ce=l.useRef(null),me=l.useRef(!0),He=l.useRef(s.app.id),Te=l.useRef(O),Je=l.useId();l.useLayoutEffect(()=>{const p=J.current;p&&(p.style.height="auto",p.style.height=`${Math.min(Math.max(p.scrollHeight,Ss),Es)}px`)},[C]);const Ke=l.useMemo(()=>f??Gt(),[f]),Ye=l.useMemo(()=>Ts(w),[w]),Re=p=>{const U=Y.current,q=pe.current?.iterator;return!U&&!q?!1:(_e.current+=1,Y.current=void 0,pe.current=void 0,console.info("[make-ai-assistant] local run cancellation requested",{reason:p}),U?.abort(),Ot(q),!0)};l.useEffect(()=>()=>{Re("unmount")},[]),l.useEffect(()=>{if(_.enabled)return;const p=g.loadConversation,U=He.current!==s.app.id;if(He.current=s.app.id,Re("reinitialize"),U&&(W(""),me.current=!0),fe(void 0),X(void 0),G(!1),ue(I.createAssistantConversationState()),!p){R(void 0),ce("ready");return}const q=new AbortController;return R(void 0),ce("loading"),console.info("[make-ai-assistant] conversation load start",{appId:s.app.id}),p.call(g,s,{signal:q.signal}).then(K=>{q.signal.aborted||(ue(I.createAssistantConversationState(K)),ce("ready"),console.info("[make-ai-assistant] conversation load success",{appId:s.app.id,messageCount:K.messages.length}))}).catch(K=>{q.signal.aborted||(console.error("[make-ai-assistant] conversation load failed",{appId:s.app.id,errorType:K instanceof Error?K.name:typeof K}),R(K),ce("error"))}),()=>q.abort()},[s.app.id,V,g,_.enabled]),l.useEffect(()=>{const p=ge.current;if(!p||!me.current)return;G(!1);const U=requestAnimationFrame(()=>{if(!me.current)return;const q=D.status==="streaming"||globalThis.matchMedia?.("(prefers-reduced-motion: reduce)").matches?"auto":"smooth";yt(p,q)});return()=>cancelAnimationFrame(U)},[D.messages,D.progress,D.status]),l.useEffect(()=>{O||(Q(!1),ae(!1))},[O]),l.useEffect(()=>{const p=O&&!Te.current;if(Te.current=O,!p)return;const U=requestAnimationFrame(()=>{const q=ge.current;if(q&&me.current){G(!1);const ve=oe.current.status==="streaming"?"auto":Ft();yt(q,ve)}else q&&G(oe.current.messages.length>0);const K=J.current;(K&&!K.disabled?K:Ce.current??Fe.current?.querySelector("button:not(:disabled)"))?.focus()});return()=>cancelAnimationFrame(U)},[O]);const ct=()=>{const p=ge.current;if(!p)return;const U=Ws(p);me.current=U,G(!U&&oe.current.messages.length>0)},lt=()=>{const p=ge.current;if(!p)return;me.current=!0,G(!1);const U=Ft();yt(p,U)},Qe=async(p,U)=>{const q=p.trim(),K=oe.current,se=U?.regenerateFrom,ve=g.regenerate;if(!q||ie!=="ready"||K.status==="streaming"||Y.current||se&&!ve)return;if(I.countCodePointsUpTo(q,I.MAKE_AI_CONVERSATION_LIMITS.messageCharacters)>I.MAKE_AI_CONVERSATION_LIMITS.messageCharacters){fe(`输入内容过长,请控制在 ${I.MAKE_AI_CONVERSATION_LIMITS.messageCharacters} 个字符以内`);return}const et={id:se?.userMessage.id??Ns("user"),content:q},tt=se?Bs(K,se.userMessage.id):I.appendUserMessage(K,et),at=new AbortController,Le=_e.current+1;_e.current=Le,Y.current=at,fe(void 0),X(void 0),G(!me.current&&K.messages.length>0),se||W(""),ue(tt);try{let xe=!1,ne,xt=0,jt=0,wt=0,ut=0,Be=0;const We=new Map,It=new Set,At=new Set([...tt.messages.map(st=>st.id),et.id]),Xe=new Set,Nt=we.createArtifactCapabilities(Ke),Ct={signal:at.signal};let mt;if(se){if(!ve)throw new Z("当前 AI 助手不支持重新生成");mt=ve({threadId:tt.threadId,message:et,assistantMessage:{id:se.assistantMessage.id,content:se.assistantMessage.content},context:s,capabilities:Nt},Ct)}else mt=g.run({threadId:tt.threadId,message:et,context:s,capabilities:Nt},Ct);const Mt=mt[Symbol.asyncIterator]();for(pe.current={iterator:Mt,requestVersion:Le};;){const st=await Mt.next();if(_e.current!==Le||st.done)break;let z;try{z=I.parseAssistantEvent(st.value)}catch(he){throw new Z(he instanceof Error?he.message:"Invalid assistant event")}if(z.type==="message.start"){if(ne!==void 0&&ne!==z.runId)throw new Z("AI 助手响应 run id 不一致");if(ne??=z.runId,jt+=1,jt>I.MAKE_AI_CONVERSATION_LIMITS.assistantMessagesPerRun)throw new Z("AI 助手单次响应消息数量超过限制");if(At.has(z.messageId))throw new Z("AI 助手响应包含重复的 message id");At.add(z.messageId),Xe.add(z.messageId),We.set(z.messageId,0)}if(z.type==="message.delta"){if(!Xe.has(z.messageId))throw new Z("AI 助手响应事件顺序无效");const he=We.get(z.messageId)??0,ze=I.countCodePointsUpTo(z.delta,I.MAKE_AI_CONVERSATION_LIMITS.messageCharacters-Be);if(Be+ze>I.MAKE_AI_CONVERSATION_LIMITS.messageCharacters)throw new Z("AI 助手响应文本超过大小限制");Be+=ze,We.set(z.messageId,he+ze)}if(z.type==="message.replace"){if(!Xe.has(z.messageId))throw new Z("AI 助手响应事件顺序无效");const he=We.get(z.messageId)??0,ze=I.countCodePointsUpTo(z.content,I.MAKE_AI_CONVERSATION_LIMITS.messageCharacters),St=Be-he+ze;if(St>I.MAKE_AI_CONVERSATION_LIMITS.messageCharacters)throw new Z("AI 助手响应文本超过大小限制");Be=St,We.set(z.messageId,ze)}if(z.type==="run.progress"){if(ne!==void 0&&ne!==z.runId)throw new Z("AI 助手响应 run id 不一致");if(ne??=z.runId,wt+=1,wt>I.MAKE_AI_CONVERSATION_LIMITS.progressStepsPerRun)throw new Z("AI 助手处理过程数量超过限制");const he=I.countCodePointsUpTo(z.message,I.MAKE_AI_CONVERSATION_LIMITS.progressCharactersPerRun-ut);if(ut+he>I.MAKE_AI_CONVERSATION_LIMITS.progressCharactersPerRun)throw new Z("AI 助手处理过程文本超过大小限制");ut+=he}if(z.type==="artifact"){if(!Xe.has(z.messageId))throw new Z("AI 助手响应事件顺序无效");if(xt+=1,xt>I.MAKE_AI_CONVERSATION_LIMITS.artifactsPerRun)throw new Z("AI 助手单次响应 Artifact 数量超过限制");if(It.has(z.artifact.id))throw new Z("AI 助手响应包含重复的 Artifact id");It.add(z.artifact.id)}if(z.type==="message.complete"&&!Xe.delete(z.messageId))throw new Z("AI 助手响应事件顺序无效");if(z.type==="run.complete"&&ne!==void 0&&ne!==z.runId)throw new Z("AI 助手响应 run id 不一致");if(z.type==="run.cancelled"&&z.runId!==void 0&&ne!==void 0&&ne!==z.runId)throw new Z("AI 助手响应 run id 不一致");if(ue(he=>I.reduceAssistantEvent(he,z)),z.type==="error"||z.type==="run.cancelled"||z.type==="run.complete"){xe=!0;break}}if(!xe)throw new Z("AI 助手流式响应在终止事件前结束")}catch(xe){if(_e.current!==Le)return;if(at.signal.aborted){ue(ne=>I.reduceAssistantEvent(ne,{type:"run.cancelled"}));return}console.error("[make-ai-assistant] assistant run failed",{appId:s.app.id,errorType:xe instanceof Error?xe.name:typeof xe}),ue(ne=>I.reduceAssistantEvent(ne,{type:"error",code:"TRANSPORT_ERROR",message:xe instanceof Z?xe.message:"连接失败,请重试",retryable:!0}))}finally{_e.current===Le&&Y.current===at&&(Y.current=void 0),pe.current?.requestVersion===Le&&(Ot(pe.current.iterator),pe.current=void 0)}},$e=p=>{if(ie!=="ready")return Promise.resolve();if(_.enabled){if(d.pending)return fe("请等待附件上传完成,或移除失败的附件"),Promise.resolve();const U=p.trim(),q=d.parts.length?[...U?[{id:Pe(),kind:"text",text:U}]:[],...d.parts]:void 0;return W(""),d.clear(),_.send(U,q)}return Qe(p)},dt=p=>Qe(p.userMessage.content,{regenerateFrom:p}),Ve=async(p,U)=>{try{await Ds(U),X({messageId:p,message:"已复制",status:"success"})}catch(q){console.error("[make-ai-assistant] copy answer failed",{errorType:q instanceof Error?q.name:typeof q}),X({messageId:p,message:"复制失败",status:"error"})}},Me=p=>{p.preventDefault(),$e(C)},r=p=>{p.key==="Enter"&&!p.shiftKey&&!p.nativeEvent.isComposing&&(p.preventDefault(),$e(C))},m=()=>{if(_.enabled){_.stop();return}Re("stop")&&ue(p=>I.reduceAssistantEvent(p,{type:"run.cancelled"}))},y=()=>{if(!_.configurationError){if(ae(!1),_.enabled){W(""),_.create(),u?.();return}Re("new-conversation"),W(""),fe(void 0),X(void 0),G(!1),me.current=!0,ue(I.createAssistantConversationState()),u?.()}},x=_.enabled&&_.cancelling.length?"停止中":g.features?.remoteCancellation===!1?"停止接收":"停止生成",E=Na(D),$=Ca(D),b=Vs(D),L=typeof g.regenerate=="function"&&g.features?.regeneration!==!1,T=()=>{if(_.enabled){_.retry();return}b&&$e(b.content)},F=p=>{if(p.key==="Escape"&&!(!le&&!de)){if(p.preventDefault(),p.stopPropagation(),le){Q(!1),be.current?.focus();return}ae(!1),qe.current?.focus()}};return a.jsxs("section",{className:`make-ai-assistant make-ai-assistant__panel${_.enabled?" make-ai-assistant__panel--managed":""}`,ref:Fe,style:B,onKeyDown:F,onDragOver:p=>{d.enabled&&p.dataTransfer.types.includes("Files")&&p.preventDefault()},onDrop:p=>{d.enabled&&p.dataTransfer.files.length&&(p.preventDefault(),d.add(Array.from(p.dataTransfer.files)))},children:[a.jsxs("header",{className:"make-ai-assistant__header",children:[a.jsx("div",{className:"make-ai-assistant__header-leading",children:_.available?a.jsxs("button",{"aria-controls":Je,"aria-expanded":de,"aria-haspopup":"dialog","aria-label":"任务列表",className:"make-ai-assistant__task-list-trigger",ref:qe,type:"button",onClick:()=>ae(p=>!p),children:[a.jsx(as,{"aria-hidden":"true",className:"make-ai-assistant__task-list-icon",size:14}),a.jsx("span",{className:"make-ai-assistant__task-list-label",children:"任务列表"}),de?a.jsx(Qa,{"aria-hidden":"true",className:"make-ai-assistant__task-list-disclosure",size:14}):a.jsx(Ya,{"aria-hidden":"true",className:"make-ai-assistant__task-list-disclosure",size:14})]}):null}),a.jsxs("div",{className:"make-ai-assistant__header-center",children:[a.jsx(it,{}),a.jsx("h2",{className:"make-ai-assistant__header-title",title:c,children:c})]}),a.jsxs("div",{className:"make-ai-assistant__header-actions",children:[h?a.jsx("button",{"aria-label":j?"退出全屏":"全屏显示","aria-pressed":j,className:"make-ai-assistant__icon-button",title:j?"退出全屏":"全屏显示",type:"button",onClick:h,children:j?a.jsx(is,{"aria-hidden":"true",className:"make-ai-assistant__icon-button-icon"}):a.jsx(ss,{"aria-hidden":"true",className:"make-ai-assistant__icon-button-icon"})}):null,g.features?.newConversation!==!1&&!_.configurationError?a.jsx("button",{"aria-label":"新建对话",className:"make-ai-assistant__icon-button",type:"button",onClick:y,children:a.jsx(_t,{"aria-hidden":"true",className:"make-ai-assistant__icon-button-icon"})}):null,o?a.jsx("button",{"aria-label":`关闭 ${c}`,className:"make-ai-assistant__icon-button",type:"button",onClick:o,children:a.jsx(Ze,{"aria-hidden":"true",className:"make-ai-assistant__icon-button-icon"})}):null]})]}),_.available&&de?a.jsx(vs,{id:Je,manager:_,triggerRef:qe,onDismiss:()=>ae(!1),onNewConversation:g.features?.newConversation!==!1?y:void 0}):null,a.jsxs("div",{className:"make-ai-assistant__body","aria-live":"polite","aria-relevant":"additions text",ref:ge,role:"log",onScroll:ct,children:[_.configurationError?a.jsxs("div",{className:"make-ai-assistant__empty",role:"alert",children:[a.jsx(ta,{"aria-hidden":"true"}),a.jsx("h3",{children:"会话管理不可用"}),a.jsx("p",{children:_.configurationError})]}):ie==="loading"?a.jsxs("div",{className:"make-ai-assistant__empty",role:"status",children:[a.jsx(it,{}),a.jsx("h3",{children:"正在恢复对话"}),a.jsx("p",{children:"正在读取当前 App 的历史消息…"})]}):ie==="error"?a.jsx("div",{className:"make-ai-assistant__empty",children:a.jsx(Xs,{error:Ne,onRetry:()=>ee(p=>p+1)})}):D.messages.length===0?a.jsxs("div",{className:"make-ai-assistant__empty",children:[a.jsx(it,{}),a.jsx("h3",{children:"有什么可以帮你?"}),a.jsx("p",{children:"我会结合当前 App、页面位置和宿主允许的上下文回答,并把过程与结果分开展示。"})]}):Zs(D,s,Ke,A,n,i,e,b?T:void 0,M,P,Ee,L,(p,U)=>{Ve(p,U)},p=>{dt(p)},_.enabled?_:void 0,g),D.progress&&!E?a.jsx(qt,{assistantName:e,progress:D.progress}):null,D.error&&!$?a.jsx(qt,{assistantName:e,error:D.error,onRetry:b?T:void 0}):null]}),te?a.jsx("button",{"aria-label":"回到最新消息",className:"make-ai-assistant__back-to-latest",type:"button",onClick:lt,children:a.jsx(Za,{"aria-hidden":"true"})}):null,a.jsxs("footer",{className:"make-ai-assistant__composer-region",children:[ie==="ready"&&Ye.length>0&&D.messages.length===0?a.jsx("div",{className:"make-ai-assistant__suggestions","aria-label":"推荐问题",children:Ye.map((p,U)=>a.jsx("button",{type:"button",onClick:()=>{$e(p)},children:p},`${U}-${p}`))}):null,a.jsxs("form",{className:"make-ai-assistant__composer",onSubmit:Me,children:[d.enabled?a.jsx(As,{attachments:d,visible:O}):null,a.jsx("textarea",{"aria-label":`向 ${e} 提问`,"aria-describedby":Ie?"make-ai-composer-error":void 0,"aria-invalid":Ie?!0:void 0,autoFocus:!0,disabled:ie!=="ready"||!_.enabled&&D.status==="streaming",placeholder:`询问当前 ${s.app.name??"App"} 中的数据…`,ref:J,rows:2,value:C,onChange:p=>{W(p.currentTarget.value),fe(void 0)},onKeyDown:r,onPaste:p=>{!d.enabled||!p.clipboardData.files.length||(p.preventDefault(),d.add(Array.from(p.clipboardData.files)))}}),a.jsxs("div",{className:"make-ai-assistant__composer-toolbar",children:[d.enabled?a.jsx(Is,{attachments:d,open:le,triggerRef:be,onOpenChange:Q}):null,a.jsxs("div",{className:"make-ai-assistant__composer-actions",children:[D.status==="streaming"?a.jsx("button",{"aria-label":x,className:"make-ai-assistant__send make-ai-assistant__send--stop","data-tooltip":x,ref:Ce,disabled:_.enabled&&_.cancelling.includes(D.activeRunId??""),type:"button",onClick:m,children:a.jsx("span",{"aria-hidden":"true"})}):a.jsx("button",{"aria-label":"发送",className:"make-ai-assistant__send",disabled:ie!=="ready"||d.pending||!C.trim()&&!d.parts.length,type:"submit",children:a.jsx(Rt,{"aria-hidden":"true"})}),_.enabled&&D.status==="streaming"?a.jsx("button",{"aria-label":"发送",className:"make-ai-assistant__send",disabled:_.busy||d.pending||!C.trim()&&!d.parts.length,type:"submit",children:a.jsx(Rt,{"aria-hidden":"true"})}):null]})]})]}),Ie?a.jsx("p",{id:"make-ai-composer-error",role:"alert",children:Ie}):null,a.jsx("p",{children:"AI 生成的结果可能存在偏差,重要数据请核对明细。"})]})]})}function Js(e){return a.jsx(Ea,{...e,visible:!0})}function Ys({defaultOpen:e=!1,hideLauncher:t=!1,launcher:s,launcherPosition:n="bottom-right",maxDrawerWidth:i,onOpenChange:o,open:u,...h}){const v=Ia(h.brandName,h.title),[j,f]=l.useState(e),[w,N]=l.useState(()=>e||u===!0),[A,g]=l.useState(!1),P=l.useRef(null),M=u??j,O=kt(h.theme),_=Rs(i),d=_===void 0?void 0:{"--make-ai-internal-drawer-max-width":`${_}px`},c=S=>{u===void 0&&f(S),o?.(S),S||(g(!1),requestAnimationFrame(()=>P.current?.focus()))},k=()=>c(!M);return l.useEffect(()=>{M&&N(!0)},[M]),l.useEffect(()=>{if(!M)return;const S=B=>{if(B.key==="Escape"){if(A){g(!1);return}c(!1),requestAnimationFrame(()=>P.current?.focus())}};return document.addEventListener("keydown",S),()=>document.removeEventListener("keydown",S)},[A,o,M]),a.jsxs("div",{className:"make-ai-assistant","data-open":M||void 0,style:O,children:[!t&&(!M||s)?s?s({open:M,toggle:k}):a.jsxs("button",{"aria-label":M?`关闭 ${v}`:`打开 ${v}`,"aria-expanded":M,className:"make-ai-assistant__launcher","data-launcher-position":n,ref:P,type:"button",onClick:k,children:[a.jsx("span",{className:"make-ai-assistant__launcher-orbit","aria-hidden":"true"}),a.jsx(ya,{"aria-hidden":"true"})]}):null,w?a.jsx("aside",{"aria-label":v,"aria-modal":"false",className:`make-ai-assistant__drawer${A?" make-ai-assistant__drawer--fullscreen":""}`,hidden:!M,role:"dialog",style:d,children:a.jsx(Ea,{...h,isFullscreen:A,onClose:()=>c(!1),onToggleFullscreen:()=>g(S=>!S),visible:M})}):null]})}exports.createArtifactCapabilities=we.createArtifactCapabilities;exports.createArtifactTemplateRegistry=we.createArtifactTemplateRegistry;exports.extendArtifactTemplateRegistry=we.extendArtifactTemplateRegistry;exports.resolveArtifactTemplate=we.resolveArtifactTemplate;exports.MAKE_AI_ARTIFACT_KINDS=I.MAKE_AI_ARTIFACT_KINDS;exports.MAKE_AI_ARTIFACT_LIMITS=I.MAKE_AI_ARTIFACT_LIMITS;exports.MAKE_AI_ARTIFACT_SCHEMA_VERSION=I.MAKE_AI_ARTIFACT_SCHEMA_VERSION;exports.MAKE_AI_CONVERSATION_LIMITS=I.MAKE_AI_CONVERSATION_LIMITS;exports.appendUserMessage=I.appendUserMessage;exports.createAssistantConversationState=I.createAssistantConversationState;exports.parseArtifact=I.parseArtifact;exports.parseAssistantEvent=I.parseAssistantEvent;exports.reduceAssistantEvent=I.reduceAssistantEvent;exports.validateArtifact=I.validateArtifact;exports.ArtifactRenderer=Vt;exports.AssistantPanel=Js;exports.MakeAiAssistant=Ys;exports.createPlatformArtifactRegistry=Gt;exports.formatArtifactValue=je;exports.platformArtifactTemplates=Xt;
|