@qfei-design/make-ai-assistant 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/react.cjs +4 -4
- package/dist/react.mjs +627 -510
- package/dist/styles.css +248 -33
- package/package.json +1 -1
package/dist/react.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),O=require("./index.cjs"),u=require("react"),l=require("./conversation-Cv1wdvCR.cjs");function Ke({artifact:s,context:t,fallback:a,onAction:n,onActionError:r,registry:i}){const d=O.resolveArtifactTemplate(i,s,t);if(!d)return a?a(s):e.jsxs("section",{className:"make-ai-artifact make-ai-artifact--unsupported",role:"status",children:[e.jsx("strong",{children:"暂不支持展示此结果"}),e.jsxs("span",{children:["结果类型:",s.kind]})]});const h={context:t,onAction:n,onActionError:r};return d.template.render(s,t,h)}const L=(s,t,a)=>{if(s==null||s==="")return"—";if(typeof s=="boolean")return s?"是":"否";if(typeof s!="number")return`${s}${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 i=t?.style==="percent"?s/100:s;return`${new Intl.NumberFormat(a,r).format(i)}${t?.unit??""}`}catch{return`${s}${t?.unit??""}`}},Pe=s=>{let t=Number.POSITIVE_INFINITY,a=Number.NEGATIVE_INFINITY;for(const n of s)t=Math.min(t,n),a=Math.max(a,n);return Number.isFinite(t)&&Number.isFinite(a)?{min:t,max:a}:{min:0,max:0}},Be=(s,t,a)=>{if(!a.onAction)return;const n=i=>{console.error("[make-ai-assistant] host action error handler failed",{actionId:s.id,artifactId:t.artifact.id,errorType:i instanceof Error?i.name:typeof i,intent:s.intent})},r=i=>{if(a.onActionError){try{Promise.resolve(a.onActionError(i,s,t)).catch(n)}catch(d){n(d)}return}console.error("[make-ai-assistant] host action failed",{actionId:s.id,artifactId:t.artifact.id,errorType:i instanceof Error?i.name:typeof i,intent:s.intent})};try{Promise.resolve(a.onAction(s,t)).catch(r)}catch(i){r(i)}},W=(s,t)=>s.actions?.length&&t.onAction?e.jsx("div",{className:"make-ai-artifact__actions",children:s.actions.map(a=>e.jsxs("button",{className:`make-ai-artifact__action make-ai-artifact__action--${a.appearance??"link"}`,type:"button",onClick:()=>Be(a,{artifact:s,context:t.context},t),children:[a.label,e.jsx("span",{"aria-hidden":"true",children:"→"})]},a.id))}):null,J=(s,t,a="")=>e.jsxs("section",{"aria-label":s.title??`${s.kind} result`,className:`make-ai-artifact ${a}`.trim(),"data-artifact-density":s.presentation?.density,"data-artifact-kind":s.kind,children:[s.title?e.jsx("h4",{className:"make-ai-artifact__title",children:s.title}):null,s.summary?e.jsx("p",{className:"make-ai-artifact__summary",children:s.summary}):null,t]}),ms=({artifact:s,renderContext:t})=>{const a=s.data.delta,n=a?L(a.value,a.format==="percent"?{style:"percent"}:void 0,t.context.locale):void 0;return J(s,e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"make-ai-artifact__metric-value",children:L(s.data.value,s.data.format,t.context.locale)}),a?e.jsxs("div",{className:`make-ai-artifact__delta make-ai-artifact__delta--${a.direction??"flat"}`,children:[e.jsx("span",{"aria-hidden":"true",children:a.direction==="up"?"↗":a.direction==="down"?"↘":"→"}),e.jsx("span",{children:n}),a.label?e.jsx("span",{children:a.label}):null]}):null,s.data.context?e.jsx("p",{className:"make-ai-artifact__context",children:s.data.context}):null,W(s,t)]}),"make-ai-artifact--metric")},ps=({artifact:s,renderContext:t})=>J(s,e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"make-ai-artifact__comparison",children:s.data.items.map(a=>e.jsxs("div",{className:"make-ai-artifact__comparison-item",children:[e.jsx("span",{children:a.label}),e.jsx("strong",{children:L(a.value,a.format,t.context.locale)}),a.hint?e.jsx("small",{children:a.hint}):null]},a.id))}),W(s,t)]}),"make-ai-artifact--comparison"),hs=({artifact:s,renderContext:t})=>{const a=s.data.series.flatMap(d=>d.points.map(h=>h.y)),{max:n,min:r}=Pe(a),i=n-r||1;return J(s,e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"make-ai-artifact__trend",children:s.data.series.map(d=>e.jsxs("div",{className:"make-ai-artifact__trend-series",children:[e.jsx("div",{className:"make-ai-artifact__trend-label",children:d.label}),e.jsx("div",{className:"make-ai-artifact__trend-bars",children:d.points.map((h,_)=>{const y=18+(h.y-r)/i*70;return e.jsxs("div",{className:"make-ai-artifact__trend-point",children:[e.jsx("span",{"aria-label":`${h.x}: ${L(h.y,d.format,t.context.locale)}`,className:"make-ai-artifact__trend-bar",role:"img",style:{height:`${y}%`},title:`${h.x}: ${L(h.y,d.format,t.context.locale)}`}),e.jsx("small",{children:h.x})]},`${h.x}-${_}`)})})]},d.id))}),W(s,t)]}),"make-ai-artifact--trend")},fs=({artifact:s,renderContext:t})=>{const{max:a}=Pe(s.data.items.map(r=>Math.abs(r.value))),n=Math.max(a,1);return J(s,e.jsxs(e.Fragment,{children:[e.jsx("ol",{className:"make-ai-artifact__ranking",children:s.data.items.map((r,i)=>e.jsxs("li",{children:[e.jsx("span",{className:"make-ai-artifact__rank",children:i+1}),e.jsxs("span",{className:"make-ai-artifact__ranking-label",children:[e.jsx("span",{children:r.label}),r.description?e.jsx("small",{children:r.description}):null]}),e.jsx("span",{className:"make-ai-artifact__ranking-track","aria-hidden":"true",children:e.jsx("span",{style:{width:`${Math.abs(r.value)/n*100}%`}})}),e.jsx("strong",{children:L(r.value,r.format,t.context.locale)})]},r.id))}),W(s,t)]}),"make-ai-artifact--ranking")},gs=(s,t)=>t.action??{id:`open-${t.id}`,label:t.title??t.id,intent:"open-record",target:{entityKey:s.data.entity.key,recordId:t.id}},_s=({artifact:s,renderContext:t})=>J(s,e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"make-ai-artifact__record-list",children:s.data.records.length===0?e.jsx("p",{className:"make-ai-artifact__empty",children:"没有符合条件的记录"}):s.data.records.map(a=>{const n=gs(s,a),r=e.jsxs(e.Fragment,{children:[e.jsx("strong",{children:a.title??a.id}),e.jsx("span",{className:"make-ai-artifact__record-values",children:s.data.columns.map(i=>e.jsxs("span",{children:[e.jsx("small",{children:i.label}),L(a.values[i.key],i.format,t.context.locale)]},i.key))}),t.onAction?e.jsx("span",{"aria-hidden":"true",children:"›"}):null]});return t.onAction?e.jsx("button",{className:"make-ai-artifact__record",type:"button",onClick:()=>Be(n,{artifact:s,context:t.context},t),children:r},a.id):e.jsx("div",{className:"make-ai-artifact__record",children:r},a.id)})}),s.data.total!==void 0?e.jsxs("p",{className:"make-ai-artifact__record-total",children:["共 ",s.data.total," 条"]}):null,W(s,t)]}),"make-ai-artifact--record-list"),xs=({artifact:s,renderContext:t})=>J(s,e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:`make-ai-artifact__notice make-ai-artifact__notice--${s.data.tone}`,children:[e.jsx("span",{"aria-hidden":"true",children:s.data.tone==="success"?"✓":s.data.tone==="warning"?"!":s.data.tone==="danger"?"×":"i"}),e.jsx("p",{children:s.data.body})]}),W(s,t)]}),"make-ai-artifact--notice"),Y=(s,t,a)=>({id:s,kinds:[t],priority:0,render:a}),js=[Y("platform.metric.default","metric",(s,t,a)=>e.jsx(ms,{artifact:s,renderContext:a})),Y("platform.comparison.default","comparison",(s,t,a)=>e.jsx(ps,{artifact:s,renderContext:a})),Y("platform.trend.default","trend",(s,t,a)=>e.jsx(hs,{artifact:s,renderContext:a})),Y("platform.ranking.default","ranking",(s,t,a)=>e.jsx(fs,{artifact:s,renderContext:a})),Y("platform.record-list.default","record-list",(s,t,a)=>e.jsx(_s,{artifact:s,renderContext:a})),Y("platform.notice.default","notice",(s,t,a)=>e.jsx(xs,{artifact:s,renderContext:a}))],qe=O.createArtifactTemplateRegistry(js).templates,De=(s=qe)=>O.createArtifactTemplateRegistry(s),As=s=>`${s}-${Date.now()}-${Math.random().toString(36).slice(2,9)}`,vs="Make",Is=["总结当前页面数据","找出需要关注的记录","列出我有权限查看的数据对象"],Ue=(s,t)=>t??`${s?.trim()||vs} AI 助手`,ys=s=>s??Is;class j extends Error{}const Oe=s=>{try{const t=s?.return?.();if(!t)return;Promise.resolve(t).catch(a=>{console.error("[make-ai-assistant] transport iterator close failed",{errorType:a instanceof Error?a.name:typeof a})})}catch(t){console.error("[make-ai-assistant] transport iterator close failed",{errorType:t instanceof Error?t.name:typeof t})}},ks=async s=>{if(globalThis.navigator?.clipboard?.writeText){await globalThis.navigator.clipboard.writeText(s);return}if(typeof document>"u"||!document.body)throw new Error("Clipboard API is unavailable");const t=document.createElement("textarea");t.value=s,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 a=document.execCommand("copy");if(t.remove(),!a)throw new Error("Clipboard copy failed")},He=()=>e.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[e.jsx("path",{d:"M12 2.8c.5 4.4 2.8 6.8 7.2 7.2-4.4.5-6.8 2.8-7.2 7.2-.5-4.4-2.8-6.8-7.2-7.2 4.4-.5 6.8-2.8 7.2-7.2Z"}),e.jsx("path",{d:"M18.3 16.1c.2 1.8 1.2 2.8 3 3-1.8.2-2.8 1.2-3 3-.2-1.8-1.2-2.8-3-3 1.8-.2 2.8-1.2 3-3Z"})]}),bs=()=>e.jsx("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:e.jsx("path",{d:"m6 6 12 12M18 6 6 18"})}),Ns=()=>e.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[e.jsx("path",{d:"M8 8h10v12H8z"}),e.jsx("path",{d:"M6 16H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})]}),Ts=()=>e.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[e.jsx("path",{d:"M20 11a8 8 0 0 0-14.7-4.4L4 8"}),e.jsx("path",{d:"M4 4v4h4"}),e.jsx("path",{d:"M4 13a8 8 0 0 0 14.7 4.4L20 16"}),e.jsx("path",{d:"M20 20v-4h-4"})]}),Ms=()=>e.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[e.jsx("path",{d:"M5 10v4"}),e.jsx("path",{d:"M8 9v6l6 3V6L8 9Z"}),e.jsx("path",{d:"M17 9.2a4.2 4.2 0 0 1 0 5.6"}),e.jsx("path",{d:"M19.4 6.8a7.6 7.6 0 0 1 0 10.4"})]}),Es=()=>e.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[e.jsx("path",{d:"M12 4v11"}),e.jsx("path",{d:"m7 10 5 5 5-5"}),e.jsx("path",{d:"M5 20h14"})]}),ws=()=>e.jsx("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:e.jsx("path",{d:"M12 5v14M5 12h14"})}),Ss=()=>e.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[e.jsx("path",{d:"m4 4 17 8-17 8 3-8-3-8Z"}),e.jsx("path",{d:"M7 12h14"})]}),ae=({className:s=""})=>e.jsx("span",{className:`make-ai-assistant__avatar ${s}`.trim(),"aria-hidden":"true",children:e.jsx(He,{})}),Cs=({src:s})=>s?e.jsx("span",{className:"make-ai-assistant__user-avatar","aria-hidden":"true",children:e.jsx("img",{alt:"",src:s})}):null,Rs=({userAvatarUrl:s,userName:t})=>{const a=t?.trim();return!a&&!s?null:e.jsxs("div",{className:"make-ai-assistant__message-identity",children:[a?e.jsx("span",{className:"make-ai-assistant__message-sender",children:a}):null,e.jsx(Cs,{src:s})]})},$s=s=>{const t=[],a=[],n=[],r=[],i=()=>{const _=a.join(`
|
|
2
|
-
`).trim();a.length=0,_&&t.push({type:"paragraph",text:_})},d=()=>{n.length&&t.push({type:"list",items:n.splice(0)})},h=()=>{const _=r.join(`
|
|
3
|
-
`).trim();r.length=0,_&&t.push({type:"pre",text:_})};for(const _ of s.replace(/\r\n?/g,`
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),V=require("./index.cjs"),h=require("react"),d=require("./conversation-Cv1wdvCR.cjs");function qe({artifact:s,context:t,fallback:a,onAction:r,onActionError:n,registry:i}){const c=V.resolveArtifactTemplate(i,s,t);if(!c)return a?a(s):e.jsxs("section",{className:"make-ai-artifact make-ai-artifact--unsupported",role:"status",children:[e.jsx("strong",{children:"暂不支持展示此结果"}),e.jsxs("span",{children:["结果类型:",s.kind]})]});const u={context:t,onAction:r,onActionError:n};return c.template.render(s,t,u)}const O=(s,t,a)=>{if(s==null||s==="")return"—";if(typeof s=="boolean")return s?"是":"否";if(typeof s!="number")return`${s}${t?.unit??""}`;const r=t?.precision,n={maximumFractionDigits:r??2,minimumFractionDigits:r};t?.style==="currency"&&t.currency?(n.style="currency",n.currency=t.currency):t?.style==="percent"&&(n.style="percent");try{const i=t?.style==="percent"?s/100:s;return`${new Intl.NumberFormat(a,n).format(i)}${t?.unit??""}`}catch{return`${s}${t?.unit??""}`}},De=s=>{let t=Number.POSITIVE_INFINITY,a=Number.NEGATIVE_INFINITY;for(const r of s)t=Math.min(t,r),a=Math.max(a,r);return Number.isFinite(t)&&Number.isFinite(a)?{min:t,max:a}:{min:0,max:0}},Ue=(s,t,a)=>{if(!a.onAction)return;const r=i=>{console.error("[make-ai-assistant] host action error handler failed",{actionId:s.id,artifactId:t.artifact.id,errorType:i instanceof Error?i.name:typeof i,intent:s.intent})},n=i=>{if(a.onActionError){try{Promise.resolve(a.onActionError(i,s,t)).catch(r)}catch(c){r(c)}return}console.error("[make-ai-assistant] host action failed",{actionId:s.id,artifactId:t.artifact.id,errorType:i instanceof Error?i.name:typeof i,intent:s.intent})};try{Promise.resolve(a.onAction(s,t)).catch(n)}catch(i){n(i)}},Y=(s,t)=>s.actions?.length&&t.onAction?e.jsx("div",{className:"make-ai-artifact__actions",children:s.actions.map(a=>e.jsxs("button",{className:`make-ai-artifact__action make-ai-artifact__action--${a.appearance??"link"}`,type:"button",onClick:()=>Ue(a,{artifact:s,context:t.context},t),children:[a.label,e.jsx("span",{"aria-hidden":"true",children:"→"})]},a.id))}):null,J=(s,t,a="")=>e.jsxs("section",{"aria-label":s.title??`${s.kind} result`,className:`make-ai-artifact ${a}`.trim(),"data-artifact-density":s.presentation?.density,"data-artifact-kind":s.kind,children:[s.title?e.jsx("h4",{className:"make-ai-artifact__title",children:s.title}):null,s.summary?e.jsx("p",{className:"make-ai-artifact__summary",children:s.summary}):null,t]}),xs=({artifact:s,renderContext:t})=>{const a=s.data.delta,r=a?O(a.value,a.format==="percent"?{style:"percent"}:void 0,t.context.locale):void 0;return J(s,e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"make-ai-artifact__metric-value",children:O(s.data.value,s.data.format,t.context.locale)}),a?e.jsxs("div",{className:`make-ai-artifact__delta make-ai-artifact__delta--${a.direction??"flat"}`,children:[e.jsx("span",{"aria-hidden":"true",children:a.direction==="up"?"↗":a.direction==="down"?"↘":"→"}),e.jsx("span",{children:r}),a.label?e.jsx("span",{children:a.label}):null]}):null,s.data.context?e.jsx("p",{className:"make-ai-artifact__context",children:s.data.context}):null,Y(s,t)]}),"make-ai-artifact--metric")},_s=({artifact:s,renderContext:t})=>J(s,e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"make-ai-artifact__comparison",children:s.data.items.map(a=>e.jsxs("div",{className:"make-ai-artifact__comparison-item",children:[e.jsx("span",{children:a.label}),e.jsx("strong",{children:O(a.value,a.format,t.context.locale)}),a.hint?e.jsx("small",{children:a.hint}):null]},a.id))}),Y(s,t)]}),"make-ai-artifact--comparison"),js=({artifact:s,renderContext:t})=>{const a=s.data.series.flatMap(c=>c.points.map(u=>u.y)),{max:r,min:n}=De(a),i=r-n||1;return J(s,e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"make-ai-artifact__trend",children:s.data.series.map(c=>e.jsxs("div",{className:"make-ai-artifact__trend-series",children:[e.jsx("div",{className:"make-ai-artifact__trend-label",children:c.label}),e.jsx("div",{className:"make-ai-artifact__trend-bars",children:c.points.map((u,v)=>{const f=18+(u.y-n)/i*70;return e.jsxs("div",{className:"make-ai-artifact__trend-point",children:[e.jsx("span",{"aria-label":`${u.x}: ${O(u.y,c.format,t.context.locale)}`,className:"make-ai-artifact__trend-bar",role:"img",style:{height:`${f}%`},title:`${u.x}: ${O(u.y,c.format,t.context.locale)}`}),e.jsx("small",{children:u.x})]},`${u.x}-${v}`)})})]},c.id))}),Y(s,t)]}),"make-ai-artifact--trend")},vs=({artifact:s,renderContext:t})=>{const{max:a}=De(s.data.items.map(n=>Math.abs(n.value))),r=Math.max(a,1);return J(s,e.jsxs(e.Fragment,{children:[e.jsx("ol",{className:"make-ai-artifact__ranking",children:s.data.items.map((n,i)=>e.jsxs("li",{children:[e.jsx("span",{className:"make-ai-artifact__rank",children:i+1}),e.jsxs("span",{className:"make-ai-artifact__ranking-label",children:[e.jsx("span",{children:n.label}),n.description?e.jsx("small",{children:n.description}):null]}),e.jsx("span",{className:"make-ai-artifact__ranking-track","aria-hidden":"true",children:e.jsx("span",{style:{width:`${Math.abs(n.value)/r*100}%`}})}),e.jsx("strong",{children:O(n.value,n.format,t.context.locale)})]},n.id))}),Y(s,t)]}),"make-ai-artifact--ranking")},As=(s,t)=>t.action??{id:`open-${t.id}`,label:t.title??t.id,intent:"open-record",target:{entityKey:s.data.entity.key,recordId:t.id}},Is=({artifact:s,renderContext:t})=>J(s,e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"make-ai-artifact__record-list",children:s.data.records.length===0?e.jsx("p",{className:"make-ai-artifact__empty",children:"没有符合条件的记录"}):s.data.records.map(a=>{const r=As(s,a),n=e.jsxs(e.Fragment,{children:[e.jsx("strong",{children:a.title??a.id}),e.jsx("span",{className:"make-ai-artifact__record-values",children:s.data.columns.map(i=>e.jsxs("span",{children:[e.jsx("small",{children:i.label}),O(a.values[i.key],i.format,t.context.locale)]},i.key))}),t.onAction?e.jsx("span",{"aria-hidden":"true",children:"›"}):null]});return t.onAction?e.jsx("button",{className:"make-ai-artifact__record",type:"button",onClick:()=>Ue(r,{artifact:s,context:t.context},t),children:n},a.id):e.jsx("div",{className:"make-ai-artifact__record",children:n},a.id)})}),s.data.total!==void 0?e.jsxs("p",{className:"make-ai-artifact__record-total",children:["共 ",s.data.total," 条"]}):null,Y(s,t)]}),"make-ai-artifact--record-list"),ys=({artifact:s,renderContext:t})=>J(s,e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:`make-ai-artifact__notice make-ai-artifact__notice--${s.data.tone}`,children:[e.jsx("span",{"aria-hidden":"true",children:s.data.tone==="success"?"✓":s.data.tone==="warning"?"!":s.data.tone==="danger"?"×":"i"}),e.jsx("p",{children:s.data.body})]}),Y(s,t)]}),"make-ai-artifact--notice"),W=(s,t,a)=>({id:s,kinds:[t],priority:0,render:a}),ks=[W("platform.metric.default","metric",(s,t,a)=>e.jsx(xs,{artifact:s,renderContext:a})),W("platform.comparison.default","comparison",(s,t,a)=>e.jsx(_s,{artifact:s,renderContext:a})),W("platform.trend.default","trend",(s,t,a)=>e.jsx(js,{artifact:s,renderContext:a})),W("platform.ranking.default","ranking",(s,t,a)=>e.jsx(vs,{artifact:s,renderContext:a})),W("platform.record-list.default","record-list",(s,t,a)=>e.jsx(Is,{artifact:s,renderContext:a})),W("platform.notice.default","notice",(s,t,a)=>e.jsx(ys,{artifact:s,renderContext:a}))],He=V.createArtifactTemplateRegistry(ks).templates,ze=(s=He)=>V.createArtifactTemplateRegistry(s),bs=s=>`${s}-${Date.now()}-${Math.random().toString(36).slice(2,9)}`,Ns="Make",Ms=["总结当前页面数据","找出需要关注的记录","列出我有权限查看的数据对象"],Ze=(s,t)=>t??`${s?.trim()||Ns} AI 助手`,Ts=s=>s??Ms;class j extends Error{}const me=(s,t)=>{if(!(typeof s!="object"||s===null))return s[t]},ws=s=>{const t=me(s,"status");return typeof t=="number"?t:me(me(s,"response"),"status")},Es=s=>{const t=me(s,"code"),a=ws(s),r=s instanceof Error?s.message:"",n=[t,r].filter(v=>typeof v=="string").join(" ").toLowerCase(),c=globalThis.navigator?.onLine===!1||/network|fetch|timeout|offline|connection|网络|连接|超时/.test(n),u=typeof a=="number"&&a>=500||/server|service|服务器|服务异常/.test(n);return c?{actionLabel:"重新连接",description:"请检查网络后再试。",kind:"network",label:"网络连接",title:"网络连接不可用"}:u?{actionLabel:"重新加载",description:"服务暂时未能响应,请稍后重试。",kind:"service",label:"服务异常",title:"服务暂时不可用"}:{actionLabel:"重新加载",description:"请稍后重试;若问题持续出现,请联系管理员。",kind:"unknown",label:"加载异常",title:"暂时无法加载对话"}},Ke=s=>{try{const t=s?.return?.();if(!t)return;Promise.resolve(t).catch(a=>{console.error("[make-ai-assistant] transport iterator close failed",{errorType:a instanceof Error?a.name:typeof a})})}catch(t){console.error("[make-ai-assistant] transport iterator close failed",{errorType:t instanceof Error?t.name:typeof t})}},Ss=async s=>{if(globalThis.navigator?.clipboard?.writeText){await globalThis.navigator.clipboard.writeText(s);return}if(typeof document>"u"||!document.body)throw new Error("Clipboard API is unavailable");const t=document.createElement("textarea");t.value=s,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 a=document.execCommand("copy");if(t.remove(),!a)throw new Error("Clipboard copy failed")},Ge=()=>e.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[e.jsx("path",{d:"M12 2.8c.5 4.4 2.8 6.8 7.2 7.2-4.4.5-6.8 2.8-7.2 7.2-.5-4.4-2.8-6.8-7.2-7.2 4.4-.5 6.8-2.8 7.2-7.2Z"}),e.jsx("path",{d:"M18.3 16.1c.2 1.8 1.2 2.8 3 3-1.8.2-2.8 1.2-3 3-.2-1.8-1.2-2.8-3-3 1.8-.2 2.8-1.2 3-3Z"})]}),Cs=()=>e.jsx("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:e.jsx("path",{d:"m6 6 12 12M18 6 6 18"})}),Rs=()=>e.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[e.jsx("path",{d:"M8 8h10v12H8z"}),e.jsx("path",{d:"M6 16H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})]}),$s=()=>e.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[e.jsx("path",{d:"M20 11a8 8 0 0 0-14.7-4.4L4 8"}),e.jsx("path",{d:"M4 4v4h4"}),e.jsx("path",{d:"M4 13a8 8 0 0 0 14.7 4.4L20 16"}),e.jsx("path",{d:"M20 20v-4h-4"})]}),Ls=()=>e.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[e.jsx("path",{d:"M5 10v4"}),e.jsx("path",{d:"M8 9v6l6 3V6L8 9Z"}),e.jsx("path",{d:"M17 9.2a4.2 4.2 0 0 1 0 5.6"}),e.jsx("path",{d:"M19.4 6.8a7.6 7.6 0 0 1 0 10.4"})]}),Fs=()=>e.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[e.jsx("path",{d:"M12 4v11"}),e.jsx("path",{d:"m7 10 5 5 5-5"}),e.jsx("path",{d:"M5 20h14"})]}),Os=()=>e.jsx("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:e.jsx("path",{d:"M12 5v14M5 12h14"})}),Vs=()=>e.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[e.jsx("path",{d:"m4 4 17 8-17 8 3-8-3-8Z"}),e.jsx("path",{d:"M7 12h14"})]}),We=()=>e.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[e.jsx("path",{d:"M20 11a8 8 0 0 0-14.7-4.4L4 8"}),e.jsx("path",{d:"M4 4v4h4"}),e.jsx("path",{d:"M4 13a8 8 0 0 0 14.7 4.4L20 16"}),e.jsx("path",{d:"M20 20v-4h-4"})]}),Ks=()=>e.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[e.jsx("circle",{cx:"12",cy:"12",r:"8"}),e.jsx("path",{d:"M12 8v4.5"}),e.jsx("path",{d:"M12 16h.01"})]}),he=({className:s=""})=>e.jsx("span",{className:`make-ai-assistant__avatar ${s}`.trim(),"aria-hidden":"true",children:e.jsx(Ge,{})}),Ps=({src:s})=>s?e.jsx("span",{className:"make-ai-assistant__user-avatar","aria-hidden":"true",children:e.jsx("img",{alt:"",src:s})}):null,Bs=({userAvatarUrl:s,userName:t})=>{const a=t?.trim();return!a&&!s?null:e.jsxs("div",{className:"make-ai-assistant__message-identity",children:[a?e.jsx("span",{className:"make-ai-assistant__message-sender",children:a}):null,e.jsx(Ps,{src:s})]})},_e=s=>{const t=s.trim();if(!(!t.startsWith("|")||!t.endsWith("|")))return t.slice(1,-1).split("|").map(a=>a.trim())},qs=s=>s.length>0&&s.every(t=>/^:?-{3,}:?$/.test(t)),Ds=(s,t)=>{const a=_e(s[t]??""),r=_e(s[t+1]??"");if(!a||!r||a.length!==r.length||!qs(r))return;const n=[];let i=t+2;for(;i<s.length;){const c=_e(s[i]??"");if(!c||c.length!==a.length)break;n.push(c),i+=1}return{headers:a,lastIndex:i-1,rows:n}},Us=s=>{const t=[],a=[],r=[],n=[],i=s.replace(/\r\n?/g,`
|
|
4
2
|
`).split(`
|
|
5
|
-
`)){const y=_.trim();if(!y){i(),d(),h();continue}const T=/^(#{1,6})\s+(.+)$/.exec(y);if(T){i(),d(),h();const m=(T[2]??"").replace(/\s+#+\s*$/,"").trim();m&&t.push({type:"heading",level:T[1]?.length,text:m});continue}if(/^\s*\|.+\|\s*$/.test(_)){i(),d(),r.push(_.trim());continue}const M=/^\s*[-*]\s+(.+)$/.exec(_);if(M){i(),h(),n.push(M[1]?.trim()??"");continue}d(),h(),a.push(y)}return i(),d(),h(),t},fe=s=>{const t=[],a=/(\*\*[^*]+\*\*|`[^`]+`)/g;let n=0;for(const r of s.matchAll(a)){const i=r[0],d=r.index??0;d>n&&t.push(s.slice(n,d)),i.startsWith("**")?t.push(e.jsx("strong",{children:i.slice(2,-2)},`${d}-strong`)):t.push(e.jsx("code",{children:i.slice(1,-1)},`${d}-code`)),n=d+i.length}return n<s.length&&t.push(s.slice(n)),t},Ls=({content:s})=>{const t=$s(s);return t.length?e.jsx("div",{className:"make-ai-assistant__bubble make-ai-assistant__assistant-text",children:t.map((a,n)=>{if(a.type==="heading"){const r=a.level<=2?"h3":"h4";return e.jsx(r,{className:`make-ai-assistant__markdown-heading make-ai-assistant__markdown-heading--${a.level}`,children:fe(a.text)},`${n}-heading`)}return a.type==="paragraph"?e.jsx("p",{children:fe(a.text)},`${n}-paragraph`):a.type==="pre"?e.jsx("pre",{children:e.jsx("code",{children:a.text})},`${n}-pre`):e.jsx("ul",{children:a.items.map((r,i)=>e.jsx("li",{children:fe(r)},`${i}-${r}`))},`${n}-list`)})}):null},ze=({assistantName:s})=>e.jsxs("div",{className:"make-ai-assistant__message-identity",children:[e.jsx(ae,{className:"make-ai-assistant__avatar--message"}),e.jsx("span",{className:"make-ai-assistant__message-sender",children:s})]}),Ze=s=>{for(let t=s.messages.length-1;t>=0;t-=1){const a=s.messages[t];if(a.role==="assistant"&&a.status==="streaming")return a.id}},Os=s=>{for(let t=s.messages.length-1;t>=0;t-=1)if(s.messages[t].role==="user")return t;return-1},Ge=s=>{const t=Os(s);if(!(t<0))for(let a=s.messages.length-1;a>t;a-=1){const n=s.messages[a];if(n.role==="assistant")return n.id}},Fs=s=>{if(s.status==="idle")for(let t=s.messages.length-1;t>=0;t-=1){const a=s.messages[t];if(a.role==="assistant"&&a.status==="complete")return a.id}},Vs=s=>{for(let t=s.messages.length-1;t>=0;t-=1){const a=s.messages[t];if(a.role==="user")return a}},Ks=(s,t)=>{const a=s.messages.findIndex(n=>n.id===t&&n.role==="user");return{...s,error:void 0,progress:void 0,status:"streaming",messages:a<0?s.messages:s.messages.slice(0,a+1)}},Ps=s=>s.scrollHeight-s.scrollTop-s.clientHeight<=48,Fe=(s="smooth")=>globalThis.matchMedia?.("(prefers-reduced-motion: reduce)").matches?"auto":s,ge=(s,t)=>{typeof s.scrollTo=="function"?s.scrollTo({top:s.scrollHeight,behavior:t}):s.scrollTop=s.scrollHeight},Ye=({error:s,onRetry:t})=>e.jsxs("div",{className:"make-ai-assistant__message-status make-ai-assistant__message-status--error",role:"alert",children:[e.jsx("strong",{children:"本次请求未完成"}),e.jsx("span",{children:s.message}),s.retryable&&t?e.jsx("button",{className:"make-ai-assistant__retry",type:"button",onClick:t,children:"重新发送"}):null]}),We=({active:s,steps:t})=>{if(!t?.length)return null;const a=t[t.length-1]??"处理中";return e.jsxs("details",{className:"make-ai-assistant__process",open:s,children:[e.jsxs("summary",{children:[s?e.jsxs("span",{className:"make-ai-assistant__progress",role:"status",children:[e.jsx("span",{"aria-hidden":"true"}),e.jsx("span",{children:a})]}):e.jsx("span",{className:"make-ai-assistant__process-title",children:"处理过程"}),e.jsxs("span",{className:"make-ai-assistant__process-count",children:[t.length," 步"]})]}),e.jsx("ol",{children:t.map((n,r)=>e.jsxs("li",{"data-step-active":s&&r===t.length-1?!0:void 0,children:[e.jsx("span",{"aria-hidden":"true"}),e.jsx("span",{children:n})]},`${r}-${n}`))})]})},Bs=({copyFeedback:s,onCopy:t,onRegenerate:a})=>!t&&!a?null:e.jsxs("div",{className:"make-ai-assistant__reply-actions","aria-label":"回复操作",children:[t?e.jsx("button",{"aria-label":"复制回答",className:"make-ai-assistant__reply-action make-ai-assistant__reply-copy","data-tooltip":"复制",type:"button",onClick:t,children:e.jsx(Ns,{})}):null,a?e.jsx("button",{"aria-label":"重新生成",className:"make-ai-assistant__reply-action make-ai-assistant__reply-regenerate","data-tooltip":"重新生成",type:"button",onClick:a,children:e.jsx(Ts,{})}):null,s?e.jsx("span",{className:"make-ai-assistant__reply-feedback","data-copy-status":s.status,role:"status",children:s.message}):null]}),Ve=({assistantName:s,error:t,onRetry:a,progress:n})=>{const r=t?"error":"progress";return t?.message??n?.message?e.jsx("article",{"aria-label":`${s}的${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:e.jsxs("div",{className:"make-ai-assistant__message-turn",children:[e.jsx(ze,{assistantName:s}),e.jsx("div",{className:"make-ai-assistant__message-stack",children:t?e.jsx(Ye,{error:t,onRetry:a}):e.jsx(We,{active:!0,steps:n?.steps})})]})}):null},qs=(s,t,a,n,r,i,d,h,_,y,T,M,m)=>{const F=Ge(s),q=Ze(s),v=Fs(s);let V;return s.messages.map(p=>{const k=p.role==="assistant",K=V;k||(V=p);const x=p.id===q,b=p.id===F?s.error:void 0,E=p.error??b,P=!k&&!!(h?.trim()||_),B=k?i:h?.trim()||"用户",me=k&&p.status==="complete"&&!E&&(p.content.trim()||p.id===v);return e.jsx("article",{"aria-label":`${B}的消息`,className:`make-ai-assistant__message make-ai-assistant__message--${p.role}`,"data-message-role":p.role,"data-message-state":E?"error":void 0,"data-message-status":p.status,"data-message-has-identity":k||P?!0:void 0,children:e.jsxs("div",{className:"make-ai-assistant__message-turn",children:[k?e.jsx(ze,{assistantName:i}):P?e.jsx(Rs,{userAvatarUrl:_,userName:h}):null,e.jsxs("div",{className:"make-ai-assistant__message-stack",children:[p.content?k?e.jsx(Ls,{content:p.content}):e.jsx("div",{className:"make-ai-assistant__bubble",children:p.content}):p.status==="streaming"?e.jsxs("div",{className:"make-ai-assistant__typing","aria-label":`${i}正在思考`,children:[e.jsx("span",{}),e.jsx("span",{}),e.jsx("span",{})]}):null,k?e.jsx(We,{active:x&&s.status==="streaming",steps:p.progressSteps}):null,E?e.jsx(Ye,{error:E,onRetry:b?d:void 0}):null,p.artifacts.map(S=>e.jsx(Ke,{artifact:S,context:t,onAction:n,onActionError:r,registry:a},S.id)),me?e.jsx(Bs,{copyFeedback:y?.messageId===p.id?{message:y.message,status:y.status}:void 0,onCopy:p.content.trim()?()=>M(p.id,p.content):void 0,onRegenerate:T&&p.id===v&&K?()=>m({userMessage:K,assistantMessage:p}):void 0}):null]})]})},p.id)})};function Je({assistantName:s="AI 助手",brandName:t,context:a,onAction:n,onActionError:r,onClose:i,onNewConversation:d,privacyNotice:h,registry:_,subtitle:y,suggestions:T,title:M,transport:m,userAvatarUrl:F,userName:q,visible:v}){const V=Ue(t,M),p=h?.trim(),[k,K]=u.useState(""),[x,b]=u.useState(l.createAssistantConversationState),E=u.useRef(x);E.current=x;const[P,B]=u.useState(void 0),[me,S]=u.useState(void 0),[Qe,Xe]=u.useState(0),[D,ne]=u.useState(()=>m.loadConversation?"loading":"ready"),[es,C]=u.useState(!1),U=u.useRef(void 0),H=u.useRef(void 0),z=u.useRef(0),_e=u.useRef(null),Q=u.useRef(null),xe=u.useRef(null),je=u.useRef(null),R=u.useRef(!0),Ae=u.useRef(a.app.id),ve=u.useRef(v),Ie=u.useMemo(()=>_??De(),[_]),ye=u.useMemo(()=>ys(T),[T]),re=o=>{const f=U.current,g=H.current?.iterator;return!f&&!g?!1:(z.current+=1,U.current=void 0,H.current=void 0,console.info("[make-ai-assistant] local run cancellation requested",{reason:o}),f?.abort(),Oe(g),!0)};u.useEffect(()=>()=>{re("unmount")},[]),u.useEffect(()=>{const o=m.loadConversation,f=Ae.current!==a.app.id;if(Ae.current=a.app.id,re("reinitialize"),f&&(K(""),R.current=!0),B(void 0),S(void 0),C(!1),b(l.createAssistantConversationState()),!o){ne("ready");return}const g=new AbortController;return ne("loading"),console.info("[make-ai-assistant] conversation load start",{appId:a.app.id}),o.call(m,a,{signal:g.signal}).then(A=>{g.signal.aborted||(b(l.createAssistantConversationState(A)),ne("ready"),console.info("[make-ai-assistant] conversation load success",{appId:a.app.id,messageCount:A.messages.length}))}).catch(A=>{g.signal.aborted||(console.error("[make-ai-assistant] conversation load failed",{appId:a.app.id,errorType:A instanceof Error?A.name:typeof A}),ne("error"))}),()=>g.abort()},[a.app.id,Qe,m]),u.useEffect(()=>{const o=Q.current;if(!o||!R.current)return;C(!1);const f=requestAnimationFrame(()=>{if(!R.current)return;const g=x.status==="streaming"||globalThis.matchMedia?.("(prefers-reduced-motion: reduce)").matches?"auto":"smooth";ge(o,g)});return()=>cancelAnimationFrame(f)},[x.messages,x.progress,x.status]),u.useEffect(()=>{const o=v&&!ve.current;if(ve.current=v,!o)return;const f=requestAnimationFrame(()=>{const g=Q.current;if(g&&R.current){C(!1);const X=E.current.status==="streaming"?"auto":Fe();ge(g,X)}else g&&C(E.current.messages.length>0);const A=xe.current;(A&&!A.disabled?A:je.current??_e.current?.querySelector("button:not(:disabled)"))?.focus()});return()=>cancelAnimationFrame(f)},[v]);const ss=()=>{const o=Q.current;if(!o)return;const f=Ps(o);R.current=f,C(!f&&E.current.messages.length>0)},ts=()=>{const o=Q.current;if(!o)return;R.current=!0,C(!1);const f=Fe();ge(o,f)},ke=async(o,f)=>{const g=o.trim(),A=E.current,w=f?.regenerateFrom,X=m.regenerate;if(!g||D!=="ready"||A.status==="streaming"||U.current||w&&!X)return;if(l.countCodePointsUpTo(g,l.MAKE_AI_CONVERSATION_LIMITS.messageCharacters)>l.MAKE_AI_CONVERSATION_LIMITS.messageCharacters){B(`输入内容过长,请控制在 ${l.MAKE_AI_CONVERSATION_LIMITS.messageCharacters} 个字符以内`);return}const ce={id:w?.userMessage.id??As("user"),content:g},le=w?Ks(A,w.userMessage.id):l.appendUserMessage(A,ce),de=new AbortController,Z=z.current+1;z.current=Z,U.current=de,B(void 0),S(void 0),C(!R.current&&A.messages.length>0),w||K(""),b(le);try{let $=!1,I,Te=0,Me=0,Ee=0,pe=0,ee=0;const se=new Map,we=new Set,Se=new Set([...le.messages.map(ue=>ue.id),ce.id]),te=new Set,Ce=O.createArtifactCapabilities(Ie),Re={signal:de.signal};let he;if(w){if(!X)throw new j("当前 AI 助手不支持重新生成");he=X({threadId:le.threadId,message:ce,assistantMessage:{id:w.assistantMessage.id,content:w.assistantMessage.content},context:a,capabilities:Ce},Re)}else he=m.run({threadId:le.threadId,message:ce,context:a,capabilities:Ce},Re);const $e=he[Symbol.asyncIterator]();for(H.current={iterator:$e,requestVersion:Z};;){const ue=await $e.next();if(z.current!==Z||ue.done)break;let c;try{c=l.parseAssistantEvent(ue.value)}catch(N){throw new j(N instanceof Error?N.message:"Invalid assistant event")}if(c.type==="message.start"){if(I!==void 0&&I!==c.runId)throw new j("AI 助手响应 run id 不一致");if(I??=c.runId,Me+=1,Me>l.MAKE_AI_CONVERSATION_LIMITS.assistantMessagesPerRun)throw new j("AI 助手单次响应消息数量超过限制");if(Se.has(c.messageId))throw new j("AI 助手响应包含重复的 message id");Se.add(c.messageId),te.add(c.messageId),se.set(c.messageId,0)}if(c.type==="message.delta"){if(!te.has(c.messageId))throw new j("AI 助手响应事件顺序无效");const N=se.get(c.messageId)??0,G=l.countCodePointsUpTo(c.delta,l.MAKE_AI_CONVERSATION_LIMITS.messageCharacters-ee);if(ee+G>l.MAKE_AI_CONVERSATION_LIMITS.messageCharacters)throw new j("AI 助手响应文本超过大小限制");ee+=G,se.set(c.messageId,N+G)}if(c.type==="message.replace"){if(!te.has(c.messageId))throw new j("AI 助手响应事件顺序无效");const N=se.get(c.messageId)??0,G=l.countCodePointsUpTo(c.content,l.MAKE_AI_CONVERSATION_LIMITS.messageCharacters),Le=ee-N+G;if(Le>l.MAKE_AI_CONVERSATION_LIMITS.messageCharacters)throw new j("AI 助手响应文本超过大小限制");ee=Le,se.set(c.messageId,G)}if(c.type==="run.progress"){if(I!==void 0&&I!==c.runId)throw new j("AI 助手响应 run id 不一致");if(I??=c.runId,Ee+=1,Ee>l.MAKE_AI_CONVERSATION_LIMITS.progressStepsPerRun)throw new j("AI 助手处理过程数量超过限制");const N=l.countCodePointsUpTo(c.message,l.MAKE_AI_CONVERSATION_LIMITS.progressCharactersPerRun-pe);if(pe+N>l.MAKE_AI_CONVERSATION_LIMITS.progressCharactersPerRun)throw new j("AI 助手处理过程文本超过大小限制");pe+=N}if(c.type==="artifact"){if(!te.has(c.messageId))throw new j("AI 助手响应事件顺序无效");if(Te+=1,Te>l.MAKE_AI_CONVERSATION_LIMITS.artifactsPerRun)throw new j("AI 助手单次响应 Artifact 数量超过限制");if(we.has(c.artifact.id))throw new j("AI 助手响应包含重复的 Artifact id");we.add(c.artifact.id)}if(c.type==="message.complete"&&!te.delete(c.messageId))throw new j("AI 助手响应事件顺序无效");if(c.type==="run.complete"&&I!==void 0&&I!==c.runId)throw new j("AI 助手响应 run id 不一致");if(c.type==="run.cancelled"&&c.runId!==void 0&&I!==void 0&&I!==c.runId)throw new j("AI 助手响应 run id 不一致");if(b(N=>l.reduceAssistantEvent(N,c)),c.type==="error"||c.type==="run.cancelled"||c.type==="run.complete"){$=!0;break}}if(!$)throw new j("AI 助手流式响应在终止事件前结束")}catch($){if(z.current!==Z)return;if(de.signal.aborted){b(I=>l.reduceAssistantEvent(I,{type:"run.cancelled"}));return}console.error("[make-ai-assistant] assistant run failed",{appId:a.app.id,errorType:$ instanceof Error?$.name:typeof $}),b(I=>l.reduceAssistantEvent(I,{type:"error",code:"TRANSPORT_ERROR",message:$ instanceof j?$.message:"连接失败,请重试",retryable:!0}))}finally{z.current===Z&&U.current===de&&(U.current=void 0),H.current?.requestVersion===Z&&(Oe(H.current.iterator),H.current=void 0)}},ie=o=>ke(o),as=o=>ke(o.userMessage.content,{regenerateFrom:o}),ns=async(o,f)=>{try{await ks(f),S({messageId:o,message:"已复制",status:"success"})}catch(g){console.error("[make-ai-assistant] copy answer failed",{errorType:g instanceof Error?g.name:typeof g}),S({messageId:o,message:"复制失败",status:"error"})}},rs=o=>{o.preventDefault(),ie(k)},is=o=>{o.key==="Enter"&&!o.shiftKey&&!o.nativeEvent.isComposing&&(o.preventDefault(),ie(k))},os=()=>{re("stop")&&b(o=>l.reduceAssistantEvent(o,{type:"run.cancelled"}))},cs=()=>{re("new-conversation"),K(""),B(void 0),S(void 0),C(!1),R.current=!0,b(l.createAssistantConversationState()),d?.()},be=m.features?.remoteCancellation===!1?"停止接收":"停止生成",ls=Ze(x),ds=Ge(x),oe=Vs(x),us=typeof m.regenerate=="function"&&m.features?.regeneration!==!1,Ne=()=>{oe&&ie(oe.content)};return e.jsxs("section",{className:"make-ai-assistant make-ai-assistant__panel",ref:_e,children:[e.jsxs("header",{className:"make-ai-assistant__header",children:[e.jsx(ae,{}),e.jsxs("div",{children:[e.jsx("h2",{children:V}),e.jsx("p",{children:y??`当前应用:${a.app.name??"未命名应用"}`})]}),e.jsxs("div",{className:"make-ai-assistant__header-actions",children:[m.features?.newConversation!==!1?e.jsx("button",{"aria-label":"新建对话",className:"make-ai-assistant__icon-button",type:"button",onClick:cs,children:e.jsx(ws,{})}):null,i?e.jsx("button",{"aria-label":`关闭 ${V}`,className:"make-ai-assistant__icon-button",type:"button",onClick:i,children:e.jsx(bs,{})}):null]})]}),p?e.jsxs("div",{className:"make-ai-assistant__privacy-note",role:"note",children:[e.jsx("span",{className:"make-ai-assistant__privacy-icon","aria-hidden":"true",children:e.jsx(Ms,{})}),e.jsx("span",{children:p})]}):null,e.jsxs("div",{className:"make-ai-assistant__body","aria-live":"polite","aria-relevant":"additions text",ref:Q,role:"log",onScroll:ss,children:[D==="loading"?e.jsxs("div",{className:"make-ai-assistant__empty",role:"status",children:[e.jsx(ae,{}),e.jsx("h3",{children:"正在恢复对话"}),e.jsx("p",{children:"正在读取当前 App 的历史消息…"})]}):D==="error"?e.jsxs("div",{className:"make-ai-assistant__empty",role:"alert",children:[e.jsx(ae,{}),e.jsx("h3",{children:"暂时无法加载对话"}),e.jsx("p",{children:"请检查网络后重试。"}),e.jsx("button",{className:"make-ai-assistant__retry",type:"button",onClick:()=>Xe(o=>o+1),children:"重新加载"})]}):x.messages.length===0?e.jsxs("div",{className:"make-ai-assistant__empty",children:[e.jsx(ae,{}),e.jsx("h3",{children:"有什么可以帮你?"}),e.jsx("p",{children:"我会结合当前 App、页面位置和宿主允许的上下文回答,并把过程与结果分开展示。"})]}):qs(x,a,Ie,n,r,s,oe?Ne:void 0,q,F,me,us,(o,f)=>{ns(o,f)},o=>{as(o)}),x.progress&&!ls?e.jsx(Ve,{assistantName:s,progress:x.progress}):null,x.error&&!ds?e.jsx(Ve,{assistantName:s,error:x.error,onRetry:oe?Ne:void 0}):null]}),es?e.jsx("button",{"aria-label":"回到最新消息",className:"make-ai-assistant__back-to-latest",type:"button",onClick:ts,children:e.jsx(Es,{})}):null,e.jsxs("footer",{className:"make-ai-assistant__composer-region",children:[D==="ready"&&ye.length>0&&x.messages.length===0?e.jsx("div",{className:"make-ai-assistant__suggestions","aria-label":"推荐问题",children:ye.map((o,f)=>e.jsx("button",{type:"button",onClick:()=>{ie(o)},children:o},`${f}-${o}`))}):null,e.jsxs("form",{className:"make-ai-assistant__composer",onSubmit:rs,children:[e.jsx("textarea",{"aria-label":`向 ${s} 提问`,"aria-describedby":P?"make-ai-composer-error":void 0,"aria-invalid":P?!0:void 0,autoFocus:!0,disabled:D!=="ready"||x.status==="streaming",placeholder:`询问当前 ${a.app.name??"App"} 中的数据…`,ref:xe,rows:2,value:k,onChange:o=>{K(o.currentTarget.value),B(void 0)},onKeyDown:is}),x.status==="streaming"?e.jsx("button",{"aria-label":be,className:"make-ai-assistant__send make-ai-assistant__send--stop","data-tooltip":be,ref:je,type:"button",onClick:os,children:e.jsx("span",{"aria-hidden":"true"})}):e.jsx("button",{"aria-label":"发送",className:"make-ai-assistant__send",disabled:D!=="ready"||!k.trim(),type:"submit",children:e.jsx(Ss,{})})]}),P?e.jsx("p",{id:"make-ai-composer-error",role:"alert",children:P}):null,e.jsx("p",{children:"AI 生成的结果可能存在偏差,重要数据请核对明细。"})]})]})}function Ds(s){return e.jsx(Je,{...s,visible:!0})}function Us({defaultOpen:s=!1,hideLauncher:t=!1,launcher:a,onOpenChange:n,open:r,...i}){const d=Ue(i.brandName,i.title),[h,_]=u.useState(s),[y,T]=u.useState(()=>s||r===!0),M=u.useRef(null),m=r??h,F=v=>{r===void 0&&_(v),n?.(v),v||requestAnimationFrame(()=>M.current?.focus())},q=()=>F(!m);return u.useEffect(()=>{m&&T(!0)},[m]),u.useEffect(()=>{if(!m)return;const v=V=>{V.key==="Escape"&&(F(!1),requestAnimationFrame(()=>M.current?.focus()))};return document.addEventListener("keydown",v),()=>document.removeEventListener("keydown",v)},[n,m]),e.jsxs("div",{className:"make-ai-assistant","data-open":m||void 0,children:[!t&&(!m||a)?a?a({open:m,toggle:q}):e.jsxs("button",{"aria-label":m?`关闭 ${d}`:`打开 ${d}`,"aria-expanded":m,className:"make-ai-assistant__launcher",ref:M,type:"button",onClick:q,children:[e.jsx("span",{className:"make-ai-assistant__launcher-orbit","aria-hidden":"true"}),e.jsx(He,{})]}):null,y?e.jsx("aside",{"aria-label":d,"aria-modal":"false",className:"make-ai-assistant__drawer",hidden:!m,role:"dialog",children:e.jsx(Je,{...i,onClose:()=>F(!1),visible:m})}):null]})}exports.createArtifactCapabilities=O.createArtifactCapabilities;exports.createArtifactTemplateRegistry=O.createArtifactTemplateRegistry;exports.extendArtifactTemplateRegistry=O.extendArtifactTemplateRegistry;exports.resolveArtifactTemplate=O.resolveArtifactTemplate;exports.MAKE_AI_ARTIFACT_KINDS=l.MAKE_AI_ARTIFACT_KINDS;exports.MAKE_AI_ARTIFACT_LIMITS=l.MAKE_AI_ARTIFACT_LIMITS;exports.MAKE_AI_ARTIFACT_SCHEMA_VERSION=l.MAKE_AI_ARTIFACT_SCHEMA_VERSION;exports.MAKE_AI_CONVERSATION_LIMITS=l.MAKE_AI_CONVERSATION_LIMITS;exports.appendUserMessage=l.appendUserMessage;exports.createAssistantConversationState=l.createAssistantConversationState;exports.parseArtifact=l.parseArtifact;exports.parseAssistantEvent=l.parseAssistantEvent;exports.reduceAssistantEvent=l.reduceAssistantEvent;exports.validateArtifact=l.validateArtifact;exports.ArtifactRenderer=Ke;exports.AssistantPanel=Ds;exports.MakeAiAssistant=Us;exports.createPlatformArtifactRegistry=De;exports.formatArtifactValue=L;exports.platformArtifactTemplates=qe;
|
|
3
|
+
`),c=()=>{const f=a.join(`
|
|
4
|
+
`).trim();a.length=0,f&&t.push({type:"paragraph",text:f})},u=()=>{r.length&&t.push({type:"list",items:r.splice(0)})},v=()=>{const f=n.join(`
|
|
5
|
+
`).trim();n.length=0,f&&t.push({type:"pre",text:f})};for(let f=0;f<i.length;f+=1){const b=i[f]??"",N=b.trim();if(!N){c(),u(),v();continue}const m=Ds(i,f);if(m){c(),u(),v(),t.push({headers:m.headers,rows:m.rows,type:"table"}),f=m.lastIndex;continue}const M=/^(#{1,6})\s+(.+)$/.exec(N);if(M){c(),u(),v();const A=(M[2]??"").replace(/\s+#+\s*$/,"").trim();A&&t.push({type:"heading",level:M[1]?.length,text:A});continue}if(/^\s*\|.+\|\s*$/.test(b)){c(),u(),n.push(b.trim());continue}const S=/^\s*[-*]\s+(.+)$/.exec(b);if(S){c(),v(),r.push(S[1]?.trim()??"");continue}u(),v(),a.push(N)}return c(),u(),v(),t},ae=s=>{const t=[],a=/(\*\*[^*]+\*\*|`[^`]+`)/g;let r=0;for(const n of s.matchAll(a)){const i=n[0],c=n.index??0;c>r&&t.push(s.slice(r,c)),i.startsWith("**")?t.push(e.jsx("strong",{children:i.slice(2,-2)},`${c}-strong`)):t.push(e.jsx("code",{children:i.slice(1,-1)},`${c}-code`)),r=c+i.length}return r<s.length&&t.push(s.slice(r)),t},Hs=({content:s})=>{const t=Us(s);return t.length?e.jsx("div",{className:"make-ai-assistant__bubble make-ai-assistant__assistant-text",children:t.map((a,r)=>{if(a.type==="heading"){const n=a.level<=2?"h3":"h4";return e.jsx(n,{className:`make-ai-assistant__markdown-heading make-ai-assistant__markdown-heading--${a.level}`,children:ae(a.text)},`${r}-heading`)}return a.type==="paragraph"?e.jsx("p",{children:ae(a.text)},`${r}-paragraph`):a.type==="pre"?e.jsx("pre",{children:e.jsx("code",{children:a.text})},`${r}-pre`):a.type==="table"?e.jsx("div",{"aria-label":"表格内容,可横向滚动",className:"make-ai-assistant__markdown-table-scroll",role:"region",tabIndex:0,children:e.jsxs("table",{className:"make-ai-assistant__markdown-table",children:[e.jsx("thead",{children:e.jsx("tr",{children:a.headers.map((n,i)=>e.jsx("th",{scope:"col",children:ae(n)},`${i}-${n}`))})}),e.jsx("tbody",{children:a.rows.map((n,i)=>e.jsx("tr",{children:n.map((c,u)=>e.jsx("td",{children:ae(c)},`${u}-${c}`))},`${i}-${n.join("|")}`))})]})},`${r}-table`):e.jsx("ul",{children:a.items.map((n,i)=>e.jsx("li",{children:ae(n)},`${i}-${n}`))},`${r}-list`)})}):null},Ye=({assistantName:s})=>e.jsxs("div",{className:"make-ai-assistant__message-identity",children:[e.jsx(he,{className:"make-ai-assistant__avatar--message"}),e.jsx("span",{className:"make-ai-assistant__message-sender",children:s})]}),Je=s=>{for(let t=s.messages.length-1;t>=0;t-=1){const a=s.messages[t];if(a.role==="assistant"&&a.status==="streaming")return a.id}},zs=s=>{for(let t=s.messages.length-1;t>=0;t-=1)if(s.messages[t].role==="user")return t;return-1},Qe=s=>{const t=zs(s);if(!(t<0))for(let a=s.messages.length-1;a>t;a-=1){const r=s.messages[a];if(r.role==="assistant")return r.id}},Zs=s=>{if(s.status==="idle")for(let t=s.messages.length-1;t>=0;t-=1){const a=s.messages[t];if(a.role==="assistant"&&a.status==="complete")return a.id}},Gs=s=>{for(let t=s.messages.length-1;t>=0;t-=1){const a=s.messages[t];if(a.role==="user")return a}},Ws=(s,t)=>{const a=s.messages.findIndex(r=>r.id===t&&r.role==="user");return{...s,error:void 0,progress:void 0,status:"streaming",messages:a<0?s.messages:s.messages.slice(0,a+1)}},Ys=s=>s.scrollHeight-s.scrollTop-s.clientHeight<=48,Pe=(s="smooth")=>globalThis.matchMedia?.("(prefers-reduced-motion: reduce)").matches?"auto":s,je=(s,t)=>{typeof s.scrollTo=="function"?s.scrollTo({top:s.scrollHeight,behavior:t}):s.scrollTop=s.scrollHeight},Xe=({error:s,onRetry:t})=>e.jsxs("div",{className:"make-ai-assistant__message-status make-ai-assistant__message-status--error","data-error-presentation":"request-failed",role:"alert",children:[e.jsxs("div",{className:"make-ai-assistant__message-status-header",children:[e.jsx("span",{className:"make-ai-assistant__message-status-icon","aria-hidden":"true",children:e.jsx(Ks,{})}),e.jsx("strong",{children:"请求未完成"})]}),e.jsx("span",{className:"make-ai-assistant__message-status-message",children:s.message}),s.retryable&&t?e.jsxs("button",{className:"make-ai-assistant__retry",type:"button",onClick:t,children:[e.jsx(We,{}),"重新发送"]}):null]}),Js=({error:s,onRetry:t})=>{const a=Es(s);return e.jsxs("section",{"aria-live":"assertive",className:"make-ai-assistant__load-failure","data-load-failure-kind":a.kind,role:"alert",children:[e.jsx("span",{className:"make-ai-assistant__load-failure-icon","aria-hidden":"true",children:e.jsxs("svg",{viewBox:"0 0 24 24",children:[e.jsx("path",{d:"M5 12a7 7 0 0 1 13.4-2.8A4.5 4.5 0 0 1 18 18H7.5A4.5 4.5 0 0 1 5 12Z"}),e.jsx("path",{d:"m9.2 14.8 5.6-5.6M9.2 9.2l5.6 5.6"})]})}),e.jsxs("div",{className:"make-ai-assistant__load-failure-copy",children:[e.jsx("span",{className:"make-ai-assistant__load-failure-label",children:a.label}),e.jsx("h3",{children:a.title}),e.jsx("p",{children:a.description})]}),e.jsxs("button",{className:"make-ai-assistant__retry make-ai-assistant__retry--primary",type:"button",onClick:t,children:[e.jsx(We,{}),a.actionLabel]})]})},es=({active:s,steps:t})=>{if(!s||!t?.length)return null;const a=t[t.length-1]??"处理中";return e.jsxs("details",{className:"make-ai-assistant__process",open:!0,children:[e.jsxs("summary",{children:[e.jsxs("span",{className:"make-ai-assistant__progress",role:"status",children:[e.jsx("span",{"aria-hidden":"true"}),e.jsx("span",{children:a})]}),e.jsxs("span",{className:"make-ai-assistant__process-count",children:[t.length," 步"]})]}),e.jsx("ol",{children:t.map((r,n)=>e.jsxs("li",{"data-step-active":n===t.length-1?!0:void 0,children:[e.jsx("span",{"aria-hidden":"true"}),e.jsx("span",{children:r})]},`${n}-${r}`))})]})},Qs=({copyFeedback:s,onCopy:t,onRegenerate:a})=>!t&&!a?null:e.jsxs("div",{className:"make-ai-assistant__reply-actions","aria-label":"回复操作",children:[t?e.jsx("button",{"aria-label":"复制回答",className:"make-ai-assistant__reply-action make-ai-assistant__reply-copy","data-tooltip":"复制",type:"button",onClick:t,children:e.jsx(Rs,{})}):null,a?e.jsx("button",{"aria-label":"重新生成",className:"make-ai-assistant__reply-action make-ai-assistant__reply-regenerate","data-tooltip":"重新生成",type:"button",onClick:a,children:e.jsx($s,{})}):null,s?e.jsx("span",{className:"make-ai-assistant__reply-feedback","data-copy-status":s.status,role:"status",children:s.message}):null]}),Be=({assistantName:s,error:t,onRetry:a,progress:r})=>{const n=t?"error":"progress";return t?.message??r?.message?e.jsx("article",{"aria-label":`${s}的${n==="error"?"错误消息":"状态消息"}`,className:`make-ai-assistant__message make-ai-assistant__message--assistant make-ai-assistant__message--${n}`,"data-message-role":"assistant","data-message-state":n,children:e.jsxs("div",{className:"make-ai-assistant__message-turn",children:[e.jsx(Ye,{assistantName:s}),e.jsx("div",{className:"make-ai-assistant__message-stack",children:t?e.jsx(Xe,{error:t,onRetry:a}):e.jsx(es,{active:!0,steps:r?.steps})})]})}):null},Xs=(s,t,a,r,n,i,c,u,v,f,b,N,m)=>{const M=Qe(s),S=Je(s),A=Zs(s);let K;return s.messages.map(p=>{const k=p.role==="assistant",P=K;k||(K=p);const _=p.id===S,T=p.id===M?s.error:void 0,E=p.error??T,B=!k&&!!(u?.trim()||v),q=k?i:u?.trim()||"用户",pe=k&&p.status==="complete"&&!E&&(p.content.trim()||p.id===A);return e.jsx("article",{"aria-label":`${q}的消息`,className:`make-ai-assistant__message make-ai-assistant__message--${p.role}`,"data-message-role":p.role,"data-message-state":E?"error":void 0,"data-message-status":p.status,"data-message-has-identity":k||B?!0:void 0,children:e.jsxs("div",{className:"make-ai-assistant__message-turn",children:[k?e.jsx(Ye,{assistantName:i}):B?e.jsx(Bs,{userAvatarUrl:v,userName:u}):null,e.jsxs("div",{className:"make-ai-assistant__message-stack",children:[p.content?k?e.jsx(Hs,{content:p.content}):e.jsx("div",{className:"make-ai-assistant__bubble",children:p.content}):p.status==="streaming"?e.jsxs("div",{className:"make-ai-assistant__typing","aria-label":`${i}正在思考`,children:[e.jsx("span",{}),e.jsx("span",{}),e.jsx("span",{})]}):null,k?e.jsx(es,{active:_&&s.status==="streaming",steps:p.progressSteps}):null,E?e.jsx(Xe,{error:E,onRetry:T?c:void 0}):null,p.artifacts.map(R=>e.jsx(qe,{artifact:R,context:t,onAction:r,onActionError:n,registry:a},R.id)),pe?e.jsx(Qs,{copyFeedback:f?.messageId===p.id?{message:f.message,status:f.status}:void 0,onCopy:p.content.trim()?()=>N(p.id,p.content):void 0,onRegenerate:b&&p.id===A&&P?()=>m({userMessage:P,assistantMessage:p}):void 0}):null]})]})},p.id)})};function ss({assistantName:s="AI 助手",brandName:t,context:a,onAction:r,onActionError:n,onClose:i,onNewConversation:c,privacyNotice:u,registry:v,subtitle:f,suggestions:b,title:N,transport:m,userAvatarUrl:M,userName:S,visible:A}){const K=Ze(t,N),p=u?.trim(),[k,P]=h.useState(""),[_,T]=h.useState(d.createAssistantConversationState),E=h.useRef(_);E.current=_;const[B,q]=h.useState(void 0),[pe,R]=h.useState(void 0),[ts,as]=h.useState(0),[D,ne]=h.useState(()=>m.loadConversation?"loading":"ready"),[ns,fe]=h.useState(void 0),[rs,$]=h.useState(!1),U=h.useRef(void 0),H=h.useRef(void 0),z=h.useRef(0),ve=h.useRef(null),Q=h.useRef(null),Ae=h.useRef(null),Ie=h.useRef(null),L=h.useRef(!0),ye=h.useRef(a.app.id),ke=h.useRef(A),be=h.useMemo(()=>v??ze(),[v]),Ne=h.useMemo(()=>Ts(b),[b]),re=o=>{const g=U.current,x=H.current?.iterator;return!g&&!x?!1:(z.current+=1,U.current=void 0,H.current=void 0,console.info("[make-ai-assistant] local run cancellation requested",{reason:o}),g?.abort(),Ke(x),!0)};h.useEffect(()=>()=>{re("unmount")},[]),h.useEffect(()=>{const o=m.loadConversation,g=ye.current!==a.app.id;if(ye.current=a.app.id,re("reinitialize"),g&&(P(""),L.current=!0),q(void 0),R(void 0),$(!1),T(d.createAssistantConversationState()),!o){fe(void 0),ne("ready");return}const x=new AbortController;return fe(void 0),ne("loading"),console.info("[make-ai-assistant] conversation load start",{appId:a.app.id}),o.call(m,a,{signal:x.signal}).then(I=>{x.signal.aborted||(T(d.createAssistantConversationState(I)),ne("ready"),console.info("[make-ai-assistant] conversation load success",{appId:a.app.id,messageCount:I.messages.length}))}).catch(I=>{x.signal.aborted||(console.error("[make-ai-assistant] conversation load failed",{appId:a.app.id,errorType:I instanceof Error?I.name:typeof I}),fe(I),ne("error"))}),()=>x.abort()},[a.app.id,ts,m]),h.useEffect(()=>{const o=Q.current;if(!o||!L.current)return;$(!1);const g=requestAnimationFrame(()=>{if(!L.current)return;const x=_.status==="streaming"||globalThis.matchMedia?.("(prefers-reduced-motion: reduce)").matches?"auto":"smooth";je(o,x)});return()=>cancelAnimationFrame(g)},[_.messages,_.progress,_.status]),h.useEffect(()=>{const o=A&&!ke.current;if(ke.current=A,!o)return;const g=requestAnimationFrame(()=>{const x=Q.current;if(x&&L.current){$(!1);const X=E.current.status==="streaming"?"auto":Pe();je(x,X)}else x&&$(E.current.messages.length>0);const I=Ae.current;(I&&!I.disabled?I:Ie.current??ve.current?.querySelector("button:not(:disabled)"))?.focus()});return()=>cancelAnimationFrame(g)},[A]);const is=()=>{const o=Q.current;if(!o)return;const g=Ys(o);L.current=g,$(!g&&E.current.messages.length>0)},os=()=>{const o=Q.current;if(!o)return;L.current=!0,$(!1);const g=Pe();je(o,g)},Me=async(o,g)=>{const x=o.trim(),I=E.current,C=g?.regenerateFrom,X=m.regenerate;if(!x||D!=="ready"||I.status==="streaming"||U.current||C&&!X)return;if(d.countCodePointsUpTo(x,d.MAKE_AI_CONVERSATION_LIMITS.messageCharacters)>d.MAKE_AI_CONVERSATION_LIMITS.messageCharacters){q(`输入内容过长,请控制在 ${d.MAKE_AI_CONVERSATION_LIMITS.messageCharacters} 个字符以内`);return}const ce={id:C?.userMessage.id??bs("user"),content:x},le=C?Ws(I,C.userMessage.id):d.appendUserMessage(I,ce),de=new AbortController,Z=z.current+1;z.current=Z,U.current=de,q(void 0),R(void 0),$(!L.current&&I.messages.length>0),C||P(""),T(le);try{let F=!1,y,Ee=0,Se=0,Ce=0,ge=0,ee=0;const se=new Map,Re=new Set,$e=new Set([...le.messages.map(ue=>ue.id),ce.id]),te=new Set,Le=V.createArtifactCapabilities(be),Fe={signal:de.signal};let xe;if(C){if(!X)throw new j("当前 AI 助手不支持重新生成");xe=X({threadId:le.threadId,message:ce,assistantMessage:{id:C.assistantMessage.id,content:C.assistantMessage.content},context:a,capabilities:Le},Fe)}else xe=m.run({threadId:le.threadId,message:ce,context:a,capabilities:Le},Fe);const Oe=xe[Symbol.asyncIterator]();for(H.current={iterator:Oe,requestVersion:Z};;){const ue=await Oe.next();if(z.current!==Z||ue.done)break;let l;try{l=d.parseAssistantEvent(ue.value)}catch(w){throw new j(w instanceof Error?w.message:"Invalid assistant event")}if(l.type==="message.start"){if(y!==void 0&&y!==l.runId)throw new j("AI 助手响应 run id 不一致");if(y??=l.runId,Se+=1,Se>d.MAKE_AI_CONVERSATION_LIMITS.assistantMessagesPerRun)throw new j("AI 助手单次响应消息数量超过限制");if($e.has(l.messageId))throw new j("AI 助手响应包含重复的 message id");$e.add(l.messageId),te.add(l.messageId),se.set(l.messageId,0)}if(l.type==="message.delta"){if(!te.has(l.messageId))throw new j("AI 助手响应事件顺序无效");const w=se.get(l.messageId)??0,G=d.countCodePointsUpTo(l.delta,d.MAKE_AI_CONVERSATION_LIMITS.messageCharacters-ee);if(ee+G>d.MAKE_AI_CONVERSATION_LIMITS.messageCharacters)throw new j("AI 助手响应文本超过大小限制");ee+=G,se.set(l.messageId,w+G)}if(l.type==="message.replace"){if(!te.has(l.messageId))throw new j("AI 助手响应事件顺序无效");const w=se.get(l.messageId)??0,G=d.countCodePointsUpTo(l.content,d.MAKE_AI_CONVERSATION_LIMITS.messageCharacters),Ve=ee-w+G;if(Ve>d.MAKE_AI_CONVERSATION_LIMITS.messageCharacters)throw new j("AI 助手响应文本超过大小限制");ee=Ve,se.set(l.messageId,G)}if(l.type==="run.progress"){if(y!==void 0&&y!==l.runId)throw new j("AI 助手响应 run id 不一致");if(y??=l.runId,Ce+=1,Ce>d.MAKE_AI_CONVERSATION_LIMITS.progressStepsPerRun)throw new j("AI 助手处理过程数量超过限制");const w=d.countCodePointsUpTo(l.message,d.MAKE_AI_CONVERSATION_LIMITS.progressCharactersPerRun-ge);if(ge+w>d.MAKE_AI_CONVERSATION_LIMITS.progressCharactersPerRun)throw new j("AI 助手处理过程文本超过大小限制");ge+=w}if(l.type==="artifact"){if(!te.has(l.messageId))throw new j("AI 助手响应事件顺序无效");if(Ee+=1,Ee>d.MAKE_AI_CONVERSATION_LIMITS.artifactsPerRun)throw new j("AI 助手单次响应 Artifact 数量超过限制");if(Re.has(l.artifact.id))throw new j("AI 助手响应包含重复的 Artifact id");Re.add(l.artifact.id)}if(l.type==="message.complete"&&!te.delete(l.messageId))throw new j("AI 助手响应事件顺序无效");if(l.type==="run.complete"&&y!==void 0&&y!==l.runId)throw new j("AI 助手响应 run id 不一致");if(l.type==="run.cancelled"&&l.runId!==void 0&&y!==void 0&&y!==l.runId)throw new j("AI 助手响应 run id 不一致");if(T(w=>d.reduceAssistantEvent(w,l)),l.type==="error"||l.type==="run.cancelled"||l.type==="run.complete"){F=!0;break}}if(!F)throw new j("AI 助手流式响应在终止事件前结束")}catch(F){if(z.current!==Z)return;if(de.signal.aborted){T(y=>d.reduceAssistantEvent(y,{type:"run.cancelled"}));return}console.error("[make-ai-assistant] assistant run failed",{appId:a.app.id,errorType:F instanceof Error?F.name:typeof F}),T(y=>d.reduceAssistantEvent(y,{type:"error",code:"TRANSPORT_ERROR",message:F instanceof j?F.message:"连接失败,请重试",retryable:!0}))}finally{z.current===Z&&U.current===de&&(U.current=void 0),H.current?.requestVersion===Z&&(Ke(H.current.iterator),H.current=void 0)}},ie=o=>Me(o),cs=o=>Me(o.userMessage.content,{regenerateFrom:o}),ls=async(o,g)=>{try{await Ss(g),R({messageId:o,message:"已复制",status:"success"})}catch(x){console.error("[make-ai-assistant] copy answer failed",{errorType:x instanceof Error?x.name:typeof x}),R({messageId:o,message:"复制失败",status:"error"})}},ds=o=>{o.preventDefault(),ie(k)},us=o=>{o.key==="Enter"&&!o.shiftKey&&!o.nativeEvent.isComposing&&(o.preventDefault(),ie(k))},ms=()=>{re("stop")&&T(o=>d.reduceAssistantEvent(o,{type:"run.cancelled"}))},hs=()=>{re("new-conversation"),P(""),q(void 0),R(void 0),$(!1),L.current=!0,T(d.createAssistantConversationState()),c?.()},Te=m.features?.remoteCancellation===!1?"停止接收":"停止生成",ps=Je(_),fs=Qe(_),oe=Gs(_),gs=typeof m.regenerate=="function"&&m.features?.regeneration!==!1,we=()=>{oe&&ie(oe.content)};return e.jsxs("section",{className:"make-ai-assistant make-ai-assistant__panel",ref:ve,children:[e.jsxs("header",{className:"make-ai-assistant__header",children:[e.jsx(he,{}),e.jsxs("div",{children:[e.jsx("h2",{children:K}),e.jsx("p",{children:f??`当前应用:${a.app.name??"未命名应用"}`})]}),e.jsxs("div",{className:"make-ai-assistant__header-actions",children:[m.features?.newConversation!==!1?e.jsx("button",{"aria-label":"新建对话",className:"make-ai-assistant__icon-button",type:"button",onClick:hs,children:e.jsx(Os,{})}):null,i?e.jsx("button",{"aria-label":`关闭 ${K}`,className:"make-ai-assistant__icon-button",type:"button",onClick:i,children:e.jsx(Cs,{})}):null]})]}),p?e.jsx("div",{className:"make-ai-assistant__notice-region",children:e.jsxs("div",{className:"make-ai-assistant__privacy-note",role:"note",children:[e.jsx("span",{className:"make-ai-assistant__privacy-icon","aria-hidden":"true",children:e.jsx(Ls,{})}),e.jsx("span",{children:p})]})}):null,e.jsxs("div",{className:`make-ai-assistant__body${p?" make-ai-assistant__body--with-notice":""}`,"aria-live":"polite","aria-relevant":"additions text",ref:Q,role:"log",onScroll:is,children:[D==="loading"?e.jsxs("div",{className:"make-ai-assistant__empty",role:"status",children:[e.jsx(he,{}),e.jsx("h3",{children:"正在恢复对话"}),e.jsx("p",{children:"正在读取当前 App 的历史消息…"})]}):D==="error"?e.jsx("div",{className:"make-ai-assistant__empty",children:e.jsx(Js,{error:ns,onRetry:()=>as(o=>o+1)})}):_.messages.length===0?e.jsxs("div",{className:"make-ai-assistant__empty",children:[e.jsx(he,{}),e.jsx("h3",{children:"有什么可以帮你?"}),e.jsx("p",{children:"我会结合当前 App、页面位置和宿主允许的上下文回答,并把过程与结果分开展示。"})]}):Xs(_,a,be,r,n,s,oe?we:void 0,S,M,pe,gs,(o,g)=>{ls(o,g)},o=>{cs(o)}),_.progress&&!ps?e.jsx(Be,{assistantName:s,progress:_.progress}):null,_.error&&!fs?e.jsx(Be,{assistantName:s,error:_.error,onRetry:oe?we:void 0}):null]}),rs?e.jsx("button",{"aria-label":"回到最新消息",className:"make-ai-assistant__back-to-latest",type:"button",onClick:os,children:e.jsx(Fs,{})}):null,e.jsxs("footer",{className:"make-ai-assistant__composer-region",children:[D==="ready"&&Ne.length>0&&_.messages.length===0?e.jsx("div",{className:"make-ai-assistant__suggestions","aria-label":"推荐问题",children:Ne.map((o,g)=>e.jsx("button",{type:"button",onClick:()=>{ie(o)},children:o},`${g}-${o}`))}):null,e.jsxs("form",{className:"make-ai-assistant__composer",onSubmit:ds,children:[e.jsx("textarea",{"aria-label":`向 ${s} 提问`,"aria-describedby":B?"make-ai-composer-error":void 0,"aria-invalid":B?!0:void 0,autoFocus:!0,disabled:D!=="ready"||_.status==="streaming",placeholder:`询问当前 ${a.app.name??"App"} 中的数据…`,ref:Ae,rows:2,value:k,onChange:o=>{P(o.currentTarget.value),q(void 0)},onKeyDown:us}),_.status==="streaming"?e.jsx("button",{"aria-label":Te,className:"make-ai-assistant__send make-ai-assistant__send--stop","data-tooltip":Te,ref:Ie,type:"button",onClick:ms,children:e.jsx("span",{"aria-hidden":"true"})}):e.jsx("button",{"aria-label":"发送",className:"make-ai-assistant__send",disabled:D!=="ready"||!k.trim(),type:"submit",children:e.jsx(Vs,{})})]}),B?e.jsx("p",{id:"make-ai-composer-error",role:"alert",children:B}):null,e.jsx("p",{children:"AI 生成的结果可能存在偏差,重要数据请核对明细。"})]})]})}function et(s){return e.jsx(ss,{...s,visible:!0})}function st({defaultOpen:s=!1,hideLauncher:t=!1,launcher:a,onOpenChange:r,open:n,...i}){const c=Ze(i.brandName,i.title),[u,v]=h.useState(s),[f,b]=h.useState(()=>s||n===!0),N=h.useRef(null),m=n??u,M=A=>{n===void 0&&v(A),r?.(A),A||requestAnimationFrame(()=>N.current?.focus())},S=()=>M(!m);return h.useEffect(()=>{m&&b(!0)},[m]),h.useEffect(()=>{if(!m)return;const A=K=>{K.key==="Escape"&&(M(!1),requestAnimationFrame(()=>N.current?.focus()))};return document.addEventListener("keydown",A),()=>document.removeEventListener("keydown",A)},[r,m]),e.jsxs("div",{className:"make-ai-assistant","data-open":m||void 0,children:[!t&&(!m||a)?a?a({open:m,toggle:S}):e.jsxs("button",{"aria-label":m?`关闭 ${c}`:`打开 ${c}`,"aria-expanded":m,className:"make-ai-assistant__launcher",ref:N,type:"button",onClick:S,children:[e.jsx("span",{className:"make-ai-assistant__launcher-orbit","aria-hidden":"true"}),e.jsx(Ge,{})]}):null,f?e.jsx("aside",{"aria-label":c,"aria-modal":"false",className:"make-ai-assistant__drawer",hidden:!m,role:"dialog",children:e.jsx(ss,{...i,onClose:()=>M(!1),visible:m})}):null]})}exports.createArtifactCapabilities=V.createArtifactCapabilities;exports.createArtifactTemplateRegistry=V.createArtifactTemplateRegistry;exports.extendArtifactTemplateRegistry=V.extendArtifactTemplateRegistry;exports.resolveArtifactTemplate=V.resolveArtifactTemplate;exports.MAKE_AI_ARTIFACT_KINDS=d.MAKE_AI_ARTIFACT_KINDS;exports.MAKE_AI_ARTIFACT_LIMITS=d.MAKE_AI_ARTIFACT_LIMITS;exports.MAKE_AI_ARTIFACT_SCHEMA_VERSION=d.MAKE_AI_ARTIFACT_SCHEMA_VERSION;exports.MAKE_AI_CONVERSATION_LIMITS=d.MAKE_AI_CONVERSATION_LIMITS;exports.appendUserMessage=d.appendUserMessage;exports.createAssistantConversationState=d.createAssistantConversationState;exports.parseArtifact=d.parseArtifact;exports.parseAssistantEvent=d.parseAssistantEvent;exports.reduceAssistantEvent=d.reduceAssistantEvent;exports.validateArtifact=d.validateArtifact;exports.ArtifactRenderer=qe;exports.AssistantPanel=et;exports.MakeAiAssistant=st;exports.createPlatformArtifactRegistry=ze;exports.formatArtifactValue=O;exports.platformArtifactTemplates=He;
|