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

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.
Files changed (38) hide show
  1. package/PUBLIC_API.md +17 -23
  2. package/README.md +12 -24
  3. package/capabilities.json +36 -9
  4. package/dist/conversation-CZfbgCXd.js +1111 -0
  5. package/dist/conversation-Cvh-IVRV.cjs +1 -0
  6. package/dist/core/conversation-management.d.ts +212 -0
  7. package/dist/core/conversation.d.ts +34 -2
  8. package/dist/core/index.d.ts +2 -0
  9. package/dist/core/response-state.d.ts +8 -0
  10. package/dist/index.cjs +1 -1
  11. package/dist/index.mjs +4 -4
  12. package/dist/make-app/protocol.d.ts +27 -0
  13. package/dist/make-app/stream.d.ts +20 -0
  14. package/dist/make-app.cjs +1 -1
  15. package/dist/make-app.d.ts +46 -11
  16. package/dist/make-app.mjs +698 -259
  17. package/dist/make-console.cjs +1 -1
  18. package/dist/make-console.mjs +1 -1
  19. package/dist/react/conversation-controls.d.ts +20 -0
  20. package/dist/react/use-attachments.d.ts +33 -0
  21. package/dist/react/use-conversation-manager.d.ts +35 -0
  22. package/dist/react.cjs +4 -4
  23. package/dist/react.mjs +2000 -845
  24. package/dist/sse.cjs +1 -1
  25. package/dist/sse.mjs +1 -1
  26. package/dist/styles.css +428 -13
  27. package/docs/backend-contract.md +8 -21
  28. package/docs/make-app-integration.md +80 -0
  29. package/examples/make-app/README.md +11 -0
  30. package/examples/make-app/index.html +5 -0
  31. package/examples/make-app/main.tsx +34 -0
  32. package/examples/make-app/style.css +4 -0
  33. package/examples/make-app/transport.ts +163 -0
  34. package/examples/make-app/vite.config.ts +7 -0
  35. package/package.json +10 -2
  36. package/recipes.json +36 -13
  37. package/dist/conversation-B7eGUXi-.js +0 -727
  38. package/dist/conversation-Cv1wdvCR.cjs +0 -1
package/dist/react.mjs CHANGED
@@ -1,124 +1,124 @@
1
- import { jsxs as i, jsx as a, Fragment as Z } from "react/jsx-runtime";
2
- import { isValidElement as Gt, cloneElement as Zt, useState as E, useRef as T, useLayoutEffect as It, useEffect as ae, useId as Qt, useMemo as gt } from "react";
3
- import { resolveArtifactTemplate as Jt, createArtifactTemplateRegistry as At, createArtifactCapabilities as ea } from "./index.mjs";
4
- import { extendArtifactTemplateRegistry as rs } from "./index.mjs";
5
- import { a as Re, r as Ce, c as Se, M as $, b as ta, p as aa } from "./conversation-B7eGUXi-.js";
6
- import { d as os, e as cs, f as ls, g as ds, v as ms } from "./conversation-B7eGUXi-.js";
7
- const Nt = (e) => e?.trim() || void 0, O = (e, t) => Nt(e) ?? t, ze = (e) => {
8
- const t = Nt(e?.primary);
1
+ import { jsxs as c, jsx as a, Fragment as Ae } from "react/jsx-runtime";
2
+ import { isValidElement as ba, cloneElement as ka, useRef as C, useState as N, useEffect as ae, useLayoutEffect as bt, useId as Dt, useMemo as Pt } from "react";
3
+ import { resolveArtifactTemplate as _a, createArtifactTemplateRegistry as Vt, createArtifactCapabilities as wa } from "./index.mjs";
4
+ import { extendArtifactTemplateRegistry as Fn } from "./index.mjs";
5
+ import { n as he, k as ft, r as Ie, l as jt, o as Xt, c as dt, M as le } from "./conversation-CZfbgCXd.js";
6
+ import { q as zn, s as Hn, t as On, u as Wn, v as Un } from "./conversation-CZfbgCXd.js";
7
+ const Yt = (e) => e?.trim() || void 0, ye = (e, t) => Yt(e) ?? t, kt = (e) => {
8
+ const t = Yt(e?.primary);
9
9
  if (t)
10
10
  return {
11
11
  "--make-ai-theme-primary": t,
12
- "--make-ai-theme-primary-hover": O(
12
+ "--make-ai-theme-primary-hover": ye(
13
13
  e?.primaryHover,
14
14
  "color-mix(in srgb, var(--make-ai-theme-primary) 84%, #15233d)"
15
15
  ),
16
- "--make-ai-theme-on-primary": O(
16
+ "--make-ai-theme-on-primary": ye(
17
17
  e?.onPrimary,
18
18
  "#fcfcff"
19
19
  ),
20
- "--make-ai-theme-bg": O(
20
+ "--make-ai-theme-bg": ye(
21
21
  e?.background,
22
22
  "color-mix(in srgb, var(--make-ai-theme-primary) 2%, #fcfcff)"
23
23
  ),
24
- "--make-ai-theme-surface": O(
24
+ "--make-ai-theme-surface": ye(
25
25
  e?.surface,
26
26
  "color-mix(in srgb, var(--make-ai-theme-primary) 4%, var(--make-ai-theme-bg))"
27
27
  ),
28
- "--make-ai-theme-surface-strong": O(
28
+ "--make-ai-theme-surface-strong": ye(
29
29
  e?.surfaceStrong,
30
30
  "color-mix(in srgb, var(--make-ai-theme-primary) 8%, var(--make-ai-theme-bg))"
31
31
  ),
32
- "--make-ai-theme-text": O(
32
+ "--make-ai-theme-text": ye(
33
33
  e?.text,
34
34
  "color-mix(in srgb, var(--make-ai-theme-primary) 12%, #252631)"
35
35
  ),
36
- "--make-ai-theme-text-secondary": O(
36
+ "--make-ai-theme-text-secondary": ye(
37
37
  e?.textSecondary,
38
38
  "color-mix(in srgb, var(--make-ai-theme-text) 74%, var(--make-ai-theme-primary))"
39
39
  ),
40
- "--make-ai-theme-border": O(
40
+ "--make-ai-theme-border": ye(
41
41
  e?.border,
42
42
  "color-mix(in srgb, var(--make-ai-theme-primary) 14%, var(--make-ai-theme-bg))"
43
43
  ),
44
- "--make-ai-theme-overlay": O(
44
+ "--make-ai-theme-overlay": ye(
45
45
  e?.overlay,
46
46
  "color-mix(in srgb, var(--make-ai-theme-text) 88%, var(--make-ai-theme-primary))"
47
47
  ),
48
- "--make-ai-theme-on-overlay": O(
48
+ "--make-ai-theme-on-overlay": ye(
49
49
  e?.onOverlay,
50
50
  "#fcfcff"
51
51
  )
52
52
  };
53
- }, vt = (e, t) => !t || !Gt(e) || typeof e.type != "string" ? e : Zt(e, {
53
+ }, Ft = (e, t) => !t || !ba(e) || typeof e.type != "string" ? e : ka(e, {
54
54
  style: { ...e.props.style, ...t }
55
55
  });
56
- function sa({
56
+ function Ia({
57
57
  artifact: e,
58
58
  context: t,
59
- fallback: s,
60
- onAction: r,
61
- onActionError: n,
59
+ fallback: n,
60
+ onAction: i,
61
+ onActionError: s,
62
62
  registry: o,
63
- theme: l
63
+ theme: d
64
64
  }) {
65
- const m = ze(l), g = Jt(o, e, t);
66
- if (!g) {
67
- const x = s ? s(e) : /* @__PURE__ */ i("section", { className: "make-ai-artifact make-ai-artifact--unsupported", role: "status", children: [
65
+ const g = kt(d), f = _a(o, e, t);
66
+ if (!f) {
67
+ const $ = n ? n(e) : /* @__PURE__ */ c("section", { className: "make-ai-artifact make-ai-artifact--unsupported", role: "status", children: [
68
68
  /* @__PURE__ */ a("strong", { children: "暂不支持展示此结果" }),
69
- /* @__PURE__ */ i("span", { children: [
69
+ /* @__PURE__ */ c("span", { children: [
70
70
  "结果类型:",
71
71
  e.kind
72
72
  ] })
73
73
  ] });
74
- return vt(x, m);
74
+ return Ft($, g);
75
75
  }
76
76
  const p = {
77
77
  context: t,
78
- onAction: r,
79
- onActionError: n,
80
- theme: l,
81
- themeStyle: m
82
- }, M = g.template.render(e, t, p);
83
- return vt(M, m);
78
+ onAction: i,
79
+ onActionError: s,
80
+ theme: d,
81
+ themeStyle: g
82
+ }, k = f.template.render(e, t, p);
83
+ return Ft(k, g);
84
84
  }
85
- const se = (e, t, s) => {
85
+ const Fe = (e, t, n) => {
86
86
  if (e == null || e === "") return "—";
87
87
  if (typeof e == "boolean") return e ? "是" : "否";
88
88
  if (typeof e != "number") return `${e}${t?.unit ?? ""}`;
89
- const r = t?.precision, n = {
90
- maximumFractionDigits: r ?? 2,
91
- minimumFractionDigits: r
89
+ const i = t?.precision, s = {
90
+ maximumFractionDigits: i ?? 2,
91
+ minimumFractionDigits: i
92
92
  };
93
- t?.style === "currency" && t.currency ? (n.style = "currency", n.currency = t.currency) : t?.style === "percent" && (n.style = "percent");
93
+ t?.style === "currency" && t.currency ? (s.style = "currency", s.currency = t.currency) : t?.style === "percent" && (s.style = "percent");
94
94
  try {
95
95
  const o = t?.style === "percent" ? e / 100 : e;
96
- return `${new Intl.NumberFormat(s, n).format(o)}${t?.unit ?? ""}`;
96
+ return `${new Intl.NumberFormat(n, s).format(o)}${t?.unit ?? ""}`;
97
97
  } catch {
98
98
  return `${e}${t?.unit ?? ""}`;
99
99
  }
100
- }, Mt = (e) => {
101
- let t = Number.POSITIVE_INFINITY, s = Number.NEGATIVE_INFINITY;
102
- for (const r of e)
103
- t = Math.min(t, r), s = Math.max(s, r);
104
- return Number.isFinite(t) && Number.isFinite(s) ? { min: t, max: s } : { min: 0, max: 0 };
105
- }, Tt = (e, t, s) => {
106
- if (!s.onAction) return;
107
- const r = (o) => {
100
+ }, Zt = (e) => {
101
+ let t = Number.POSITIVE_INFINITY, n = Number.NEGATIVE_INFINITY;
102
+ for (const i of e)
103
+ t = Math.min(t, i), n = Math.max(n, i);
104
+ return Number.isFinite(t) && Number.isFinite(n) ? { min: t, max: n } : { min: 0, max: 0 };
105
+ }, Gt = (e, t, n) => {
106
+ if (!n.onAction) return;
107
+ const i = (o) => {
108
108
  console.error("[make-ai-assistant] host action error handler failed", {
109
109
  actionId: e.id,
110
110
  artifactId: t.artifact.id,
111
111
  errorType: o instanceof Error ? o.name : typeof o,
112
112
  intent: e.intent
113
113
  });
114
- }, n = (o) => {
115
- if (s.onActionError) {
114
+ }, s = (o) => {
115
+ if (n.onActionError) {
116
116
  try {
117
117
  Promise.resolve(
118
- s.onActionError(o, e, t)
119
- ).catch(r);
120
- } catch (l) {
121
- r(l);
118
+ n.onActionError(o, e, t)
119
+ ).catch(i);
120
+ } catch (d) {
121
+ i(d);
122
122
  }
123
123
  return;
124
124
  }
@@ -130,167 +130,167 @@ const se = (e, t, s) => {
130
130
  });
131
131
  };
132
132
  try {
133
- Promise.resolve(s.onAction(e, t)).catch(n);
133
+ Promise.resolve(n.onAction(e, t)).catch(s);
134
134
  } catch (o) {
135
- n(o);
135
+ s(o);
136
136
  }
137
- }, me = (e, t) => e.actions?.length && t.onAction ? /* @__PURE__ */ a("div", { className: "make-ai-artifact__actions", children: e.actions.map((s) => /* @__PURE__ */ i(
137
+ }, Ue = (e, t) => e.actions?.length && t.onAction ? /* @__PURE__ */ a("div", { className: "make-ai-artifact__actions", children: e.actions.map((n) => /* @__PURE__ */ c(
138
138
  "button",
139
139
  {
140
- className: `make-ai-artifact__action make-ai-artifact__action--${s.appearance ?? "link"}`,
140
+ className: `make-ai-artifact__action make-ai-artifact__action--${n.appearance ?? "link"}`,
141
141
  type: "button",
142
- onClick: () => Tt(s, { artifact: e, context: t.context }, t),
142
+ onClick: () => Gt(n, { artifact: e, context: t.context }, t),
143
143
  children: [
144
- s.label,
144
+ n.label,
145
145
  /* @__PURE__ */ a("span", { "aria-hidden": "true", children: "→" })
146
146
  ]
147
147
  },
148
- s.id
149
- )) }) : null, ue = (e, t, s = "", r) => /* @__PURE__ */ i(
148
+ n.id
149
+ )) }) : null, qe = (e, t, n = "", i) => /* @__PURE__ */ c(
150
150
  "section",
151
151
  {
152
152
  "aria-label": e.title ?? `${e.kind} result`,
153
- className: `make-ai-artifact ${s}`.trim(),
153
+ className: `make-ai-artifact ${n}`.trim(),
154
154
  "data-artifact-density": e.presentation?.density,
155
155
  "data-artifact-kind": e.kind,
156
- style: r,
156
+ style: i,
157
157
  children: [
158
158
  e.title ? /* @__PURE__ */ a("h4", { className: "make-ai-artifact__title", children: e.title }) : null,
159
159
  e.summary ? /* @__PURE__ */ a("p", { className: "make-ai-artifact__summary", children: e.summary }) : null,
160
160
  t
161
161
  ]
162
162
  }
163
- ), na = ({
163
+ ), Aa = ({
164
164
  artifact: e,
165
165
  renderContext: t
166
166
  }) => {
167
- const s = e.data.delta, r = s ? se(
168
- s.value,
169
- s.format === "percent" ? { style: "percent" } : void 0,
167
+ const n = e.data.delta, i = n ? Fe(
168
+ n.value,
169
+ n.format === "percent" ? { style: "percent" } : void 0,
170
170
  t.context.locale
171
171
  ) : void 0;
172
- return ue(
172
+ return qe(
173
173
  e,
174
- /* @__PURE__ */ i(Z, { children: [
175
- /* @__PURE__ */ a("div", { className: "make-ai-artifact__metric-value", children: se(
174
+ /* @__PURE__ */ c(Ae, { children: [
175
+ /* @__PURE__ */ a("div", { className: "make-ai-artifact__metric-value", children: Fe(
176
176
  e.data.value,
177
177
  e.data.format,
178
178
  t.context.locale
179
179
  ) }),
180
- s ? /* @__PURE__ */ i(
180
+ n ? /* @__PURE__ */ c(
181
181
  "div",
182
182
  {
183
- className: `make-ai-artifact__delta make-ai-artifact__delta--${s.direction ?? "flat"}`,
183
+ className: `make-ai-artifact__delta make-ai-artifact__delta--${n.direction ?? "flat"}`,
184
184
  children: [
185
- /* @__PURE__ */ a("span", { "aria-hidden": "true", children: s.direction === "up" ? "↗" : s.direction === "down" ? "↘" : "→" }),
186
- /* @__PURE__ */ a("span", { children: r }),
187
- s.label ? /* @__PURE__ */ a("span", { children: s.label }) : null
185
+ /* @__PURE__ */ a("span", { "aria-hidden": "true", children: n.direction === "up" ? "↗" : n.direction === "down" ? "↘" : "→" }),
186
+ /* @__PURE__ */ a("span", { children: i }),
187
+ n.label ? /* @__PURE__ */ a("span", { children: n.label }) : null
188
188
  ]
189
189
  }
190
190
  ) : null,
191
191
  e.data.context ? /* @__PURE__ */ a("p", { className: "make-ai-artifact__context", children: e.data.context }) : null,
192
- me(e, t)
192
+ Ue(e, t)
193
193
  ] }),
194
194
  "make-ai-artifact--metric",
195
195
  t.themeStyle
196
196
  );
197
- }, ra = ({
197
+ }, Ma = ({
198
198
  artifact: e,
199
199
  renderContext: t
200
- }) => ue(
200
+ }) => qe(
201
201
  e,
202
- /* @__PURE__ */ i(Z, { children: [
203
- /* @__PURE__ */ a("div", { className: "make-ai-artifact__comparison", children: e.data.items.map((s) => /* @__PURE__ */ i("div", { className: "make-ai-artifact__comparison-item", children: [
204
- /* @__PURE__ */ a("span", { children: s.label }),
205
- /* @__PURE__ */ a("strong", { children: se(s.value, s.format, t.context.locale) }),
206
- s.hint ? /* @__PURE__ */ a("small", { children: s.hint }) : null
207
- ] }, s.id)) }),
208
- me(e, t)
202
+ /* @__PURE__ */ c(Ae, { children: [
203
+ /* @__PURE__ */ a("div", { className: "make-ai-artifact__comparison", children: e.data.items.map((n) => /* @__PURE__ */ c("div", { className: "make-ai-artifact__comparison-item", children: [
204
+ /* @__PURE__ */ a("span", { children: n.label }),
205
+ /* @__PURE__ */ a("strong", { children: Fe(n.value, n.format, t.context.locale) }),
206
+ n.hint ? /* @__PURE__ */ a("small", { children: n.hint }) : null
207
+ ] }, n.id)) }),
208
+ Ue(e, t)
209
209
  ] }),
210
210
  "make-ai-artifact--comparison",
211
211
  t.themeStyle
212
- ), ia = ({
212
+ ), Ta = ({
213
213
  artifact: e,
214
214
  renderContext: t
215
215
  }) => {
216
- const s = e.data.series.flatMap((l) => l.points.map((m) => m.y)), { max: r, min: n } = Mt(s), o = r - n || 1;
217
- return ue(
216
+ const n = e.data.series.flatMap((d) => d.points.map((g) => g.y)), { max: i, min: s } = Zt(n), o = i - s || 1;
217
+ return qe(
218
218
  e,
219
- /* @__PURE__ */ i(Z, { children: [
220
- /* @__PURE__ */ a("div", { className: "make-ai-artifact__trend", children: e.data.series.map((l) => /* @__PURE__ */ i("div", { className: "make-ai-artifact__trend-series", children: [
221
- /* @__PURE__ */ a("div", { className: "make-ai-artifact__trend-label", children: l.label }),
222
- /* @__PURE__ */ a("div", { className: "make-ai-artifact__trend-bars", children: l.points.map((m, g) => {
223
- const p = 18 + (m.y - n) / o * 70;
224
- return /* @__PURE__ */ i("div", { className: "make-ai-artifact__trend-point", children: [
219
+ /* @__PURE__ */ c(Ae, { children: [
220
+ /* @__PURE__ */ a("div", { className: "make-ai-artifact__trend", children: e.data.series.map((d) => /* @__PURE__ */ c("div", { className: "make-ai-artifact__trend-series", children: [
221
+ /* @__PURE__ */ a("div", { className: "make-ai-artifact__trend-label", children: d.label }),
222
+ /* @__PURE__ */ a("div", { className: "make-ai-artifact__trend-bars", children: d.points.map((g, f) => {
223
+ const p = 18 + (g.y - s) / o * 70;
224
+ return /* @__PURE__ */ c("div", { className: "make-ai-artifact__trend-point", children: [
225
225
  /* @__PURE__ */ a(
226
226
  "span",
227
227
  {
228
- "aria-label": `${m.x}: ${se(
229
- m.y,
230
- l.format,
228
+ "aria-label": `${g.x}: ${Fe(
229
+ g.y,
230
+ d.format,
231
231
  t.context.locale
232
232
  )}`,
233
233
  className: "make-ai-artifact__trend-bar",
234
234
  role: "img",
235
235
  style: { height: `${p}%` },
236
- title: `${m.x}: ${se(
237
- m.y,
238
- l.format,
236
+ title: `${g.x}: ${Fe(
237
+ g.y,
238
+ d.format,
239
239
  t.context.locale
240
240
  )}`
241
241
  }
242
242
  ),
243
- /* @__PURE__ */ a("small", { children: m.x })
244
- ] }, `${m.x}-${g}`);
243
+ /* @__PURE__ */ a("small", { children: g.x })
244
+ ] }, `${g.x}-${f}`);
245
245
  }) })
246
- ] }, l.id)) }),
247
- me(e, t)
246
+ ] }, d.id)) }),
247
+ Ue(e, t)
248
248
  ] }),
249
249
  "make-ai-artifact--trend",
250
250
  t.themeStyle
251
251
  );
252
- }, oa = ({
252
+ }, Ca = ({
253
253
  artifact: e,
254
254
  renderContext: t
255
255
  }) => {
256
- const { max: s } = Mt(
257
- e.data.items.map((n) => Math.abs(n.value))
258
- ), r = Math.max(s, 1);
259
- return ue(
256
+ const { max: n } = Zt(
257
+ e.data.items.map((s) => Math.abs(s.value))
258
+ ), i = Math.max(n, 1);
259
+ return qe(
260
260
  e,
261
- /* @__PURE__ */ i(Z, { children: [
262
- /* @__PURE__ */ a("ol", { className: "make-ai-artifact__ranking", children: e.data.items.map((n, o) => /* @__PURE__ */ i("li", { children: [
261
+ /* @__PURE__ */ c(Ae, { children: [
262
+ /* @__PURE__ */ a("ol", { className: "make-ai-artifact__ranking", children: e.data.items.map((s, o) => /* @__PURE__ */ c("li", { children: [
263
263
  /* @__PURE__ */ a("span", { className: "make-ai-artifact__rank", children: o + 1 }),
264
- /* @__PURE__ */ i("span", { className: "make-ai-artifact__ranking-label", children: [
265
- /* @__PURE__ */ a("span", { children: n.label }),
266
- n.description ? /* @__PURE__ */ a("small", { children: n.description }) : null
264
+ /* @__PURE__ */ c("span", { className: "make-ai-artifact__ranking-label", children: [
265
+ /* @__PURE__ */ a("span", { children: s.label }),
266
+ s.description ? /* @__PURE__ */ a("small", { children: s.description }) : null
267
267
  ] }),
268
- /* @__PURE__ */ a("span", { className: "make-ai-artifact__ranking-track", "aria-hidden": "true", children: /* @__PURE__ */ a("span", { style: { width: `${Math.abs(n.value) / r * 100}%` } }) }),
269
- /* @__PURE__ */ a("strong", { children: se(n.value, n.format, t.context.locale) })
270
- ] }, n.id)) }),
271
- me(e, t)
268
+ /* @__PURE__ */ a("span", { className: "make-ai-artifact__ranking-track", "aria-hidden": "true", children: /* @__PURE__ */ a("span", { style: { width: `${Math.abs(s.value) / i * 100}%` } }) }),
269
+ /* @__PURE__ */ a("strong", { children: Fe(s.value, s.format, t.context.locale) })
270
+ ] }, s.id)) }),
271
+ Ue(e, t)
272
272
  ] }),
273
273
  "make-ai-artifact--ranking",
274
274
  t.themeStyle
275
275
  );
276
- }, ca = (e, t) => t.action ?? {
276
+ }, Na = (e, t) => t.action ?? {
277
277
  id: `open-${t.id}`,
278
278
  label: t.title ?? t.id,
279
279
  intent: "open-record",
280
280
  target: { entityKey: e.data.entity.key, recordId: t.id }
281
- }, la = ({
281
+ }, Ra = ({
282
282
  artifact: e,
283
283
  renderContext: t
284
- }) => ue(
284
+ }) => qe(
285
285
  e,
286
- /* @__PURE__ */ i(Z, { children: [
287
- /* @__PURE__ */ a("div", { className: "make-ai-artifact__record-list", children: e.data.records.length === 0 ? /* @__PURE__ */ a("p", { className: "make-ai-artifact__empty", children: "没有符合条件的记录" }) : e.data.records.map((s) => {
288
- const r = ca(e, s), n = /* @__PURE__ */ i(Z, { children: [
289
- /* @__PURE__ */ a("strong", { children: s.title ?? s.id }),
290
- /* @__PURE__ */ a("span", { className: "make-ai-artifact__record-values", children: e.data.columns.map((o) => /* @__PURE__ */ i("span", { children: [
286
+ /* @__PURE__ */ c(Ae, { children: [
287
+ /* @__PURE__ */ a("div", { className: "make-ai-artifact__record-list", children: e.data.records.length === 0 ? /* @__PURE__ */ a("p", { className: "make-ai-artifact__empty", children: "没有符合条件的记录" }) : e.data.records.map((n) => {
288
+ const i = Na(e, n), s = /* @__PURE__ */ c(Ae, { children: [
289
+ /* @__PURE__ */ a("strong", { children: n.title ?? n.id }),
290
+ /* @__PURE__ */ a("span", { className: "make-ai-artifact__record-values", children: e.data.columns.map((o) => /* @__PURE__ */ c("span", { children: [
291
291
  /* @__PURE__ */ a("small", { children: o.label }),
292
- se(
293
- s.values[o.key],
292
+ Fe(
293
+ n.values[o.key],
294
294
  o.format,
295
295
  t.context.locale
296
296
  )
@@ -302,120 +302,1171 @@ const se = (e, t, s) => {
302
302
  {
303
303
  className: "make-ai-artifact__record",
304
304
  type: "button",
305
- onClick: () => Tt(r, {
305
+ onClick: () => Gt(i, {
306
306
  artifact: e,
307
307
  context: t.context
308
308
  }, t),
309
- children: n
309
+ children: s
310
310
  },
311
- s.id
312
- ) : /* @__PURE__ */ a("div", { className: "make-ai-artifact__record", children: n }, s.id);
311
+ n.id
312
+ ) : /* @__PURE__ */ a("div", { className: "make-ai-artifact__record", children: s }, n.id);
313
313
  }) }),
314
- e.data.total !== void 0 ? /* @__PURE__ */ i("p", { className: "make-ai-artifact__record-total", children: [
314
+ e.data.total !== void 0 ? /* @__PURE__ */ c("p", { className: "make-ai-artifact__record-total", children: [
315
315
  "共 ",
316
316
  e.data.total,
317
317
  " 条"
318
318
  ] }) : null,
319
- me(e, t)
319
+ Ue(e, t)
320
320
  ] }),
321
321
  "make-ai-artifact--record-list",
322
322
  t.themeStyle
323
- ), da = ({
323
+ ), Ea = ({
324
324
  artifact: e,
325
325
  renderContext: t
326
- }) => ue(
326
+ }) => qe(
327
327
  e,
328
- /* @__PURE__ */ i(Z, { children: [
329
- /* @__PURE__ */ i("div", { className: `make-ai-artifact__notice make-ai-artifact__notice--${e.data.tone}`, children: [
328
+ /* @__PURE__ */ c(Ae, { children: [
329
+ /* @__PURE__ */ c("div", { className: `make-ai-artifact__notice make-ai-artifact__notice--${e.data.tone}`, children: [
330
330
  /* @__PURE__ */ a("span", { "aria-hidden": "true", children: e.data.tone === "success" ? "✓" : e.data.tone === "warning" ? "!" : e.data.tone === "danger" ? "×" : "i" }),
331
331
  /* @__PURE__ */ a("p", { children: e.data.body })
332
332
  ] }),
333
- me(e, t)
333
+ Ue(e, t)
334
334
  ] }),
335
335
  "make-ai-artifact--notice",
336
336
  t.themeStyle
337
- ), de = (e, t, s) => ({ id: e, kinds: [t], priority: 0, render: s }), ma = [
338
- de("platform.metric.default", "metric", (e, t, s) => /* @__PURE__ */ a(na, { artifact: e, renderContext: s })),
339
- de("platform.comparison.default", "comparison", (e, t, s) => /* @__PURE__ */ a(ra, { artifact: e, renderContext: s })),
340
- de("platform.trend.default", "trend", (e, t, s) => /* @__PURE__ */ a(ia, { artifact: e, renderContext: s })),
341
- de("platform.ranking.default", "ranking", (e, t, s) => /* @__PURE__ */ a(oa, { artifact: e, renderContext: s })),
342
- de("platform.record-list.default", "record-list", (e, t, s) => /* @__PURE__ */ a(la, { artifact: e, renderContext: s })),
343
- de("platform.notice.default", "notice", (e, t, s) => /* @__PURE__ */ a(da, { artifact: e, renderContext: s }))
344
- ], ua = At(ma).templates, ha = (e = ua) => At(e), pa = (e) => `${e}-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`, fa = "Make", ga = [
337
+ ), Oe = (e, t, n) => ({ id: e, kinds: [t], priority: 0, render: n }), Sa = [
338
+ Oe("platform.metric.default", "metric", (e, t, n) => /* @__PURE__ */ a(Aa, { artifact: e, renderContext: n })),
339
+ Oe("platform.comparison.default", "comparison", (e, t, n) => /* @__PURE__ */ a(Ma, { artifact: e, renderContext: n })),
340
+ Oe("platform.trend.default", "trend", (e, t, n) => /* @__PURE__ */ a(Ta, { artifact: e, renderContext: n })),
341
+ Oe("platform.ranking.default", "ranking", (e, t, n) => /* @__PURE__ */ a(Ca, { artifact: e, renderContext: n })),
342
+ Oe("platform.record-list.default", "record-list", (e, t, n) => /* @__PURE__ */ a(Ra, { artifact: e, renderContext: n })),
343
+ Oe("platform.notice.default", "notice", (e, t, n) => /* @__PURE__ */ a(Ea, { artifact: e, renderContext: n }))
344
+ ], xa = Vt(Sa).templates, $a = (e = xa) => Vt(e), We = () => globalThis.crypto.randomUUID(), _t = (e) => {
345
+ const t = e, n = t?.status ?? t?.response?.status;
346
+ return n === 409 ? "数据已变化或对话仍在运行,请刷新后重试" : n === 401 || t?.code === "AI_AUTH_REQUIRED" || t?.code === "AI_AUTH_EXPIRED" ? "登录已失效,请重新登录" : n === 403 ? "当前账号无权访问该对话" : n === 404 ? "对话或回答已不可见,请刷新列表" : t?.message?.startsWith("输入内容过长") ? t.message : "操作未完成,请重试或刷新对话";
347
+ };
348
+ function La(e, t) {
349
+ const n = t.features?.conversationManagement === !0, i = n ? t.scopeKey?.(e) ?? e.app.id : "", s = C(i);
350
+ s.current = i;
351
+ const o = C(i), [d, g] = N(he), f = C(d), p = (r) => {
352
+ const h = typeof r == "function" ? r(f.current) : r;
353
+ f.current = h, g(h);
354
+ }, [k, $] = N([]), [O, q] = N(), y = C(void 0), [V, ee] = N(""), [j, v] = N(-1), [u, l] = N(!1), [T, L] = N(!1), [re, E] = N(n), [J, K] = N(!1), [D, X] = N(), [ie, oe] = N([]), [pe, Me] = N([]), Te = C(/* @__PURE__ */ new Set()), Y = C(/* @__PURE__ */ new Map()), w = C(0), b = C(0), H = C(0), Z = C(void 0), te = C(void 0), De = C(/* @__PURE__ */ new Map()), S = (r, h = i) => b.current === r && s.current === h, ne = () => {
355
+ const r = new AbortController();
356
+ return Te.current.add(r), r;
357
+ }, ce = (r) => Te.current.delete(r), fe = (r) => {
358
+ y.current = r, q(r);
359
+ }, Ce = () => {
360
+ for (const r of Y.current.values()) r.abort();
361
+ Y.current.clear();
362
+ }, Q = (r) => {
363
+ r instanceof Error && r.name === "AbortError" || (console.warn("[make-ai-assistant] conversation operation failed", {
364
+ errorType: r instanceof Error ? r.name : typeof r
365
+ }), X(_t(r)));
366
+ }, ke = async (r) => {
367
+ if (!n || !t.listConversations) return;
368
+ const h = b.current, _ = ++H.current, A = ne();
369
+ try {
370
+ const M = await t.listConversations(
371
+ e,
372
+ { cursor: r },
373
+ { signal: A.signal }
374
+ );
375
+ if (!S(h) || A.signal.aborted || _ !== H.current)
376
+ return;
377
+ $((x) => [
378
+ ...new Map(
379
+ [...r ? x : [], ...M.chats].map((I) => [
380
+ I.chatId,
381
+ I
382
+ ])
383
+ ).values()
384
+ ]), ee(M.nextCursor);
385
+ } catch (M) {
386
+ S(h) && !A.signal.aborted && Q(M);
387
+ } finally {
388
+ ce(A), S(h) && E(!1);
389
+ }
390
+ }, Ne = async (r, h, _) => {
391
+ const A = b.current, M = w.current;
392
+ let x;
393
+ try {
394
+ for await (const I of r) {
395
+ if (!S(A) || h.signal.aborted || M !== w.current || y.current?.chatId !== _)
396
+ return;
397
+ const W = jt(I);
398
+ if (W.type === "response.accepted" || W.type === "response.state") {
399
+ x = W.responseId;
400
+ const z = Y.current.get(x);
401
+ if (z && z !== h) {
402
+ W.type === "response.accepted" && p((B) => Ie(B, W)), h.abort();
403
+ return;
404
+ }
405
+ Y.current.set(x, h);
406
+ }
407
+ p((z) => Ie(z, W)), W.type === "response.terminal" && (oe((z) => z.filter((B) => B !== W.responseId)), ke());
408
+ }
409
+ } catch (I) {
410
+ S(A) && !h.signal.aborted && M === w.current && (Q(I), x || p((W) => ({
411
+ ...W,
412
+ status: Object.values(W.responses ?? {}).some(
413
+ (z) => !ft(z.status)
414
+ ) ? "streaming" : "error"
415
+ })));
416
+ } finally {
417
+ x && Y.current.get(x) === h && Y.current.delete(x), ce(h);
418
+ }
419
+ }, Qe = async (r, h, _, A) => {
420
+ if (!t.getResponse || !t.watchResponse) return;
421
+ const M = new Set(
422
+ r.filter((I) => I.role === "assistant" && I.persistent).map((I) => I.responseId)
423
+ ), x = [
424
+ ...new Map(
425
+ r.filter(
426
+ (I) => I.role === "user" && I.responseId && !M.has(I.responseId)
427
+ ).map((I) => [I.responseId, I.cursor ?? -1])
428
+ ).entries()
429
+ ].slice(-20);
430
+ for (const [I, W] of x) {
431
+ if (!S(A) || _ !== w.current) return;
432
+ if (Y.current.has(I)) continue;
433
+ const z = ne();
434
+ try {
435
+ const B = await t.getResponse(
436
+ e,
437
+ { chatId: h, responseId: I },
438
+ { signal: z.signal }
439
+ );
440
+ if (!S(A) || z.signal.aborted || _ !== w.current || Y.current.has(I)) continue;
441
+ p(
442
+ (ge) => Ie(
443
+ ge,
444
+ ft(B.status) ? { type: "response.snapshot", snapshot: B } : {
445
+ type: "response.state",
446
+ chatId: h,
447
+ responseId: I,
448
+ status: B.status
449
+ }
450
+ )
451
+ ), B.status === "failed" || B.status === "cancelled" ? p(
452
+ (ge) => Ie(ge, {
453
+ type: "response.terminal",
454
+ chatId: h,
455
+ responseId: I,
456
+ status: B.status
457
+ })
458
+ ) : (Y.current.set(I, z), Ne(
459
+ t.watchResponse(
460
+ e,
461
+ { chatId: h, responseId: I, historyCursor: W },
462
+ { signal: z.signal }
463
+ ),
464
+ z,
465
+ h
466
+ ));
467
+ } catch (B) {
468
+ S(A) && !z.signal.aborted && Q(B);
469
+ } finally {
470
+ Y.current.get(I) !== z && ce(z);
471
+ }
472
+ }
473
+ }, de = async (r) => {
474
+ const h = ++w.current, _ = b.current, A = ne();
475
+ Ce(), X(void 0), E(!0), oe([]), te.current = void 0, fe(r), p({ messages: [], status: "idle", threadId: r.chatId }), v(-1), l(!1), L(!1);
476
+ try {
477
+ const [M, x] = await Promise.all([
478
+ t.getConversation(
479
+ e,
480
+ { chatId: r.chatId },
481
+ { signal: A.signal }
482
+ ),
483
+ t.loadConversation(e, {
484
+ threadId: r.chatId,
485
+ cursor: -1,
486
+ signal: A.signal
487
+ })
488
+ ]);
489
+ if (!S(_) || A.signal.aborted || h !== w.current)
490
+ return;
491
+ if (M.chatId !== r.chatId || x.threadId !== r.chatId)
492
+ throw new Error("Conversation mismatch");
493
+ fe(M), p(he(x)), v(x.nextCursor ?? -1), l(x.hasMore ?? !1), Qe(x.messages, r.chatId, h, _);
494
+ } catch (M) {
495
+ S(_) && !A.signal.aborted && h === w.current && Q(M);
496
+ } finally {
497
+ ce(A), S(_) && h === w.current && E(!1);
498
+ }
499
+ }, ve = async () => {
500
+ if (y.current) return y.current;
501
+ if (Z.current ??= { requestId: We() }, Z.current.promise) return Z.current.promise;
502
+ const r = b.current, h = w.current, _ = ne(), A = Z.current;
503
+ return K(!0), A.promise = t.createConversation(
504
+ e,
505
+ { requestId: A.requestId },
506
+ { signal: _.signal }
507
+ ).then((M) => {
508
+ if (!S(r) || _.signal.aborted || h !== w.current)
509
+ throw Object.assign(new Error("Stale create"), {
510
+ name: "AbortError"
511
+ });
512
+ return Z.current = void 0, fe(M), p({ messages: [], status: "idle", threadId: M.chatId }), ke(), M;
513
+ }).finally(() => {
514
+ ce(_), A.promise = void 0, S(r) && K(!1);
515
+ }), A.promise;
516
+ }, et = async () => {
517
+ if (!(J || Z.current?.promise)) {
518
+ w.current += 1, Ce(), fe(void 0), X(void 0), te.current = void 0, p(he()), l(!1), v(-1);
519
+ try {
520
+ await ve();
521
+ } catch (r) {
522
+ Q(r);
523
+ }
524
+ }
525
+ }, Re = async (r) => {
526
+ const h = ne();
527
+ te.current = r, X(void 0), f.current.messages.some((_) => _.id === r.message.id) || p((_) => Xt(_, r.message)), await Ne(
528
+ t.run(r, { signal: h.signal }),
529
+ h,
530
+ r.threadId
531
+ );
532
+ }, tt = async (r, h) => {
533
+ if (!(!r.trim() && !h?.length))
534
+ try {
535
+ const _ = await ve(), A = {
536
+ id: We(),
537
+ content: r,
538
+ ...h ? { parts: h } : {}
539
+ };
540
+ await Re({
541
+ threadId: _.chatId,
542
+ message: A,
543
+ context: e,
544
+ capabilities: {
545
+ artifactSchemaVersions: [],
546
+ artifactKinds: [],
547
+ templates: []
548
+ }
549
+ });
550
+ } catch (_) {
551
+ Q(_);
552
+ }
553
+ }, Ee = async () => {
554
+ const r = te.current;
555
+ if (!r || r.threadId !== y.current?.chatId) {
556
+ y.current && await de(y.current);
557
+ return;
558
+ }
559
+ const h = f.current.messages.find(
560
+ (_) => _.id === r.message.id
561
+ );
562
+ if (h?.responseId && t.watchResponse) {
563
+ const _ = h.responseId;
564
+ if (Y.current.has(_)) return;
565
+ const A = ne();
566
+ Y.current.set(_, A), X(void 0), await Ne(
567
+ t.watchResponse(
568
+ e,
569
+ {
570
+ chatId: r.threadId,
571
+ responseId: _,
572
+ historyCursor: h.cursor
573
+ },
574
+ { signal: A.signal }
575
+ ),
576
+ A,
577
+ r.threadId
578
+ );
579
+ } else await Re(r);
580
+ }, Se = async (r = f.current.activeRunId) => {
581
+ const h = y.current;
582
+ if (!h || !r || !t.cancelResponse || ie.includes(r))
583
+ return;
584
+ const _ = b.current, A = w.current, M = ne();
585
+ oe((x) => [...x, r]), X(void 0);
586
+ try {
587
+ const x = await t.cancelResponse(
588
+ e,
589
+ { chatId: h.chatId, responseId: r },
590
+ { signal: M.signal }
591
+ );
592
+ if (!S(_) || A !== w.current) return;
593
+ if (ft(x.status))
594
+ p(
595
+ (I) => Ie(I, {
596
+ type: "response.snapshot",
597
+ snapshot: x
598
+ })
599
+ ), oe((I) => I.filter((W) => W !== r));
600
+ else if (!Y.current.has(r) && t.watchResponse) {
601
+ const I = ne();
602
+ Y.current.set(r, I), Ne(
603
+ t.watchResponse(
604
+ e,
605
+ { chatId: h.chatId, responseId: r },
606
+ { signal: I.signal }
607
+ ),
608
+ I,
609
+ h.chatId
610
+ );
611
+ }
612
+ } catch (x) {
613
+ S(_) && A === w.current && (Q(x), oe((I) => I.filter((W) => W !== r)));
614
+ } finally {
615
+ ce(M);
616
+ }
617
+ }, xe = async (r, h = y.current) => {
618
+ if (!h || J) return;
619
+ const _ = b.current, A = ne();
620
+ K(!0), X(void 0);
621
+ try {
622
+ const M = await t.updateConversation(
623
+ e,
624
+ { chatId: h.chatId, expectedRevision: h.revision, ...r },
625
+ { signal: A.signal }
626
+ );
627
+ if (!S(_)) return;
628
+ y.current?.chatId === M.chatId && fe(M), await ke();
629
+ } catch (M) {
630
+ if (S(_)) {
631
+ Q(M);
632
+ try {
633
+ const x = await t.getConversation(
634
+ e,
635
+ { chatId: h.chatId },
636
+ { signal: A.signal }
637
+ );
638
+ S(_) && y.current?.chatId === h.chatId && fe(x);
639
+ } catch {
640
+ }
641
+ ke();
642
+ }
643
+ } finally {
644
+ ce(A), S(_) && K(!1);
645
+ }
646
+ }, at = async (r = y.current) => {
647
+ if (!r || J) return;
648
+ const h = b.current, _ = ne();
649
+ K(!0), X(void 0);
650
+ try {
651
+ if (await t.deleteConversation(
652
+ e,
653
+ { chatId: r.chatId, expectedRevision: r.revision },
654
+ { signal: _.signal }
655
+ ), !S(h)) return;
656
+ y.current?.chatId === r.chatId && (w.current += 1, Ce(), fe(void 0), p(he())), await ke();
657
+ } catch (A) {
658
+ S(h) && Q(A);
659
+ } finally {
660
+ ce(_), S(h) && K(!1);
661
+ }
662
+ }, Pe = async (r, h, _ = "", A = "") => {
663
+ const M = y.current;
664
+ if (!M || !r.persistent || !t.setFeedback || pe.includes(r.id))
665
+ return;
666
+ const x = {
667
+ chatId: M.chatId,
668
+ messageId: r.id,
669
+ rating: h,
670
+ ..._ ? { reason: _ } : {},
671
+ ...A ? { comment: A } : {}
672
+ }, I = De.current.get(r.id), { requestId: W, ...z } = I ?? {
673
+ requestId: ""
674
+ }, B = I && JSON.stringify(z) === JSON.stringify(x) ? I : { ...x, requestId: We() };
675
+ De.current.set(r.id, B);
676
+ const ge = b.current, Ke = w.current, Ve = ne();
677
+ Me((ue) => [...ue, r.id]), X(void 0);
678
+ try {
679
+ const ue = await t.setFeedback(e, B, {
680
+ signal: Ve.signal
681
+ });
682
+ return !S(ge) || Ke !== w.current || De.current.get(r.id) !== B ? void 0 : (p((Be) => ({
683
+ ...Be,
684
+ messages: Be.messages.map(
685
+ (_e) => _e.id === r.id && ue.revision >= (_e.feedback?.revision ?? 0) ? { ..._e, feedback: ue } : _e
686
+ )
687
+ })), De.current.delete(r.id), !0);
688
+ } catch (ue) {
689
+ return S(ge) && Ke === w.current && Q(ue), !1;
690
+ } finally {
691
+ ce(Ve), S(ge) && Me((ue) => ue.filter((Be) => Be !== r.id));
692
+ }
693
+ }, nt = async () => {
694
+ if (!y.current || !u || re) return;
695
+ const r = b.current, h = w.current, _ = y.current, A = ne();
696
+ E(!0);
697
+ try {
698
+ const M = await t.loadConversation(e, {
699
+ threadId: _.chatId,
700
+ cursor: j,
701
+ signal: A.signal
702
+ });
703
+ if (!S(r) || h !== w.current) return;
704
+ const x = he(M), I = [
705
+ ...new Map(
706
+ [...f.current.messages, ...x.messages].map((B) => [
707
+ B.id,
708
+ B
709
+ ])
710
+ ).values()
711
+ ];
712
+ let W = 0;
713
+ const z = [];
714
+ for (const B of I.slice(-200).reverse()) {
715
+ if (W += [...B.content].length, W > 1e6) break;
716
+ z.unshift(B);
717
+ }
718
+ z.length < I.length && L(!0), p((B) => ({ ...B, messages: z })), v(M.nextCursor ?? j), l(M.hasMore ?? !1), Qe(M.messages, _.chatId, h, r);
719
+ } catch (M) {
720
+ S(r) && Q(M);
721
+ } finally {
722
+ ce(A), S(r) && E(!1);
723
+ }
724
+ };
725
+ ae(() => (b.current += 1, o.current = i, Z.current = void 0, te.current = void 0, De.current.clear(), fe(void 0), $([]), ee(""), p(he()), X(void 0), E(n), K(!1), oe([]), Me([]), n && ke(), () => {
726
+ b.current += 1, w.current += 1;
727
+ for (const r of Te.current) r.abort();
728
+ Te.current.clear(), Y.current.clear();
729
+ }), [n, i, t]);
730
+ const $e = o.current === i;
731
+ return {
732
+ enabled: n,
733
+ state: $e ? d : he(),
734
+ setState: p,
735
+ chats: $e ? k : [],
736
+ chat: $e ? O : void 0,
737
+ listCursor: V,
738
+ historyMore: u,
739
+ historyTruncated: T,
740
+ loading: !$e || re,
741
+ busy: J,
742
+ error: $e ? D : void 0,
743
+ cancelling: ie,
744
+ feedbackBusy: pe,
745
+ refresh: ke,
746
+ select: de,
747
+ create: et,
748
+ ensureChat: ve,
749
+ send: tt,
750
+ retry: Ee,
751
+ stop: Se,
752
+ update: xe,
753
+ remove: at,
754
+ feedback: Pe,
755
+ moreHistory: nt,
756
+ setError: X
757
+ };
758
+ }
759
+ const Da = () => /* @__PURE__ */ c("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: [
760
+ /* @__PURE__ */ a("path", { d: "M5 5.5h14v10H9l-4 3v-13Z" }),
761
+ /* @__PURE__ */ a("path", { d: "M8 9h8M8 12h6" })
762
+ ] }), Pa = () => /* @__PURE__ */ a("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: /* @__PURE__ */ a("path", { d: "M12 5v14M5 12h14" }) });
763
+ function Fa({
764
+ id: e,
765
+ manager: t,
766
+ onDismiss: n,
767
+ onNewConversation: i,
768
+ triggerRef: s
769
+ }) {
770
+ const [o, d] = N(""), [g, f] = N(!1), p = C(null);
771
+ return ae(() => {
772
+ d(t.chat?.title ?? ""), f(!1);
773
+ }, [t.chat?.chatId, t.chat?.title]), ae(() => {
774
+ const k = ($) => {
775
+ const O = $.target;
776
+ O instanceof Node && (p.current?.contains(O) || s.current?.contains(O) || n());
777
+ };
778
+ return document.addEventListener("pointerdown", k), () => {
779
+ document.removeEventListener("pointerdown", k);
780
+ };
781
+ }, [n, s]), /* @__PURE__ */ c(
782
+ "div",
783
+ {
784
+ "aria-label": "任务列表",
785
+ className: "make-ai-assistant__conversation-controls",
786
+ id: e,
787
+ ref: p,
788
+ role: "dialog",
789
+ children: [
790
+ /* @__PURE__ */ c("div", { className: "make-ai-assistant__conversation-heading", children: [
791
+ /* @__PURE__ */ a("span", { children: "最近对话" }),
792
+ /* @__PURE__ */ a(
793
+ "button",
794
+ {
795
+ "aria-label": "刷新任务列表",
796
+ className: "make-ai-assistant__conversation-refresh",
797
+ disabled: t.busy,
798
+ type: "button",
799
+ onClick: () => {
800
+ t.refresh();
801
+ },
802
+ children: "刷新"
803
+ }
804
+ )
805
+ ] }),
806
+ /* @__PURE__ */ c(
807
+ "nav",
808
+ {
809
+ "aria-label": "对话列表",
810
+ className: "make-ai-assistant__conversation-list",
811
+ children: [
812
+ t.chats.map((k) => /* @__PURE__ */ c(
813
+ "div",
814
+ {
815
+ className: "make-ai-assistant__conversation-row",
816
+ children: [
817
+ /* @__PURE__ */ c(
818
+ "button",
819
+ {
820
+ type: "button",
821
+ "aria-pressed": t.chat?.chatId === k.chatId,
822
+ onClick: () => {
823
+ n(), t.select(k);
824
+ },
825
+ children: [
826
+ /* @__PURE__ */ a(Da, {}),
827
+ /* @__PURE__ */ a("span", { children: k.title || "未命名对话" })
828
+ ]
829
+ }
830
+ ),
831
+ /* @__PURE__ */ a(
832
+ "button",
833
+ {
834
+ type: "button",
835
+ disabled: t.busy,
836
+ "aria-label": `${k.pinned ? "取消置顶" : "置顶"} ${k.title}`,
837
+ onClick: () => {
838
+ t.update({ pinned: !k.pinned }, k);
839
+ },
840
+ children: k.pinned ? "★" : "☆"
841
+ }
842
+ )
843
+ ]
844
+ },
845
+ k.chatId
846
+ )),
847
+ !t.loading && !t.chats.length ? /* @__PURE__ */ a("p", { children: "暂无对话,发送消息即可新建" }) : null,
848
+ t.listCursor ? /* @__PURE__ */ a(
849
+ "button",
850
+ {
851
+ className: "make-ai-assistant__conversation-more",
852
+ type: "button",
853
+ onClick: () => {
854
+ t.refresh(t.listCursor);
855
+ },
856
+ children: "更多对话"
857
+ }
858
+ ) : null
859
+ ]
860
+ }
861
+ ),
862
+ t.chat ? /* @__PURE__ */ c("details", { className: "make-ai-assistant__conversation-management", children: [
863
+ /* @__PURE__ */ a("summary", { children: "管理当前对话" }),
864
+ /* @__PURE__ */ c("div", { className: "make-ai-assistant__conversation-actions", children: [
865
+ /* @__PURE__ */ a(
866
+ "input",
867
+ {
868
+ "aria-label": "对话标题",
869
+ maxLength: 255,
870
+ value: o,
871
+ onChange: (k) => d(k.currentTarget.value)
872
+ }
873
+ ),
874
+ /* @__PURE__ */ a(
875
+ "button",
876
+ {
877
+ type: "button",
878
+ disabled: t.busy || !o.trim(),
879
+ onClick: () => {
880
+ t.update({ title: o });
881
+ },
882
+ children: "保存标题"
883
+ }
884
+ ),
885
+ /* @__PURE__ */ a(
886
+ "button",
887
+ {
888
+ type: "button",
889
+ disabled: t.busy,
890
+ onClick: () => f(!0),
891
+ children: "删除对话"
892
+ }
893
+ ),
894
+ g ? /* @__PURE__ */ c("div", { role: "group", "aria-label": "确认删除对话", children: [
895
+ /* @__PURE__ */ c("span", { children: [
896
+ "删除“",
897
+ t.chat.title,
898
+ "”?"
899
+ ] }),
900
+ /* @__PURE__ */ a(
901
+ "button",
902
+ {
903
+ type: "button",
904
+ disabled: t.busy,
905
+ onClick: () => {
906
+ f(!1), t.remove();
907
+ },
908
+ children: "确认删除"
909
+ }
910
+ ),
911
+ /* @__PURE__ */ a("button", { type: "button", onClick: () => f(!1), children: "保留" })
912
+ ] }) : null,
913
+ t.historyMore ? /* @__PURE__ */ a(
914
+ "button",
915
+ {
916
+ type: "button",
917
+ disabled: t.loading,
918
+ onClick: () => {
919
+ t.moreHistory();
920
+ },
921
+ children: "继续加载历史"
922
+ }
923
+ ) : null,
924
+ t.historyTruncated || t.state.historyTruncated ? /* @__PURE__ */ a("p", { children: "当前展示有界消息窗口,可重新选择对话从头读取。" }) : null
925
+ ] })
926
+ ] }) : null,
927
+ t.error ? /* @__PURE__ */ c("div", { className: "make-ai-assistant__conversation-error", role: "alert", children: [
928
+ /* @__PURE__ */ a("span", { children: t.error }),
929
+ /* @__PURE__ */ a("button", { type: "button", onClick: () => {
930
+ t.retry();
931
+ }, children: "恢复对话" })
932
+ ] }) : null,
933
+ i ? /* @__PURE__ */ c(
934
+ "button",
935
+ {
936
+ className: "make-ai-assistant__conversation-new",
937
+ type: "button",
938
+ onClick: i,
939
+ children: [
940
+ /* @__PURE__ */ a(Pa, {}),
941
+ /* @__PURE__ */ a("span", { children: "新建对话" })
942
+ ]
943
+ }
944
+ ) : null
945
+ ]
946
+ }
947
+ );
948
+ }
949
+ function Ba({
950
+ message: e,
951
+ manager: t
952
+ }) {
953
+ const [n, i] = N(!1), [s, o] = N(""), [d, g] = N(""), f = t.feedbackBusy.includes(e.id);
954
+ if (!e.persistent || e.role !== "assistant" || e.intermediate)
955
+ return null;
956
+ const p = e.feedback?.rating ?? "none";
957
+ return /* @__PURE__ */ c("div", { className: "make-ai-assistant__feedback", "aria-label": "回答反馈", children: [
958
+ /* @__PURE__ */ a(
959
+ "button",
960
+ {
961
+ type: "button",
962
+ "aria-label": "点赞",
963
+ "aria-pressed": p === "like",
964
+ disabled: f,
965
+ onClick: () => {
966
+ t.feedback(e, p === "like" ? "none" : "like");
967
+ },
968
+ children: "赞"
969
+ }
970
+ ),
971
+ /* @__PURE__ */ a(
972
+ "button",
973
+ {
974
+ type: "button",
975
+ "aria-label": "点踩",
976
+ "aria-pressed": p === "dislike",
977
+ disabled: f,
978
+ onClick: () => {
979
+ if (p === "dislike") {
980
+ t.feedback(e, "none");
981
+ return;
982
+ }
983
+ o(e.feedback?.reason ?? ""), g(e.feedback?.comment ?? ""), i(!0);
984
+ },
985
+ children: "踩"
986
+ }
987
+ ),
988
+ p === "dislike" ? /* @__PURE__ */ a(
989
+ "button",
990
+ {
991
+ type: "button",
992
+ disabled: f,
993
+ onClick: () => {
994
+ o(e.feedback?.reason ?? ""), g(e.feedback?.comment ?? ""), i(!0);
995
+ },
996
+ children: "修改反馈"
997
+ }
998
+ ) : null,
999
+ n ? /* @__PURE__ */ c(
1000
+ "form",
1001
+ {
1002
+ onSubmit: (k) => {
1003
+ k.preventDefault(), t.feedback(e, "dislike", s, d).then(($) => {
1004
+ $ && i(!1);
1005
+ });
1006
+ },
1007
+ children: [
1008
+ /* @__PURE__ */ a(
1009
+ "input",
1010
+ {
1011
+ "aria-label": "反馈原因",
1012
+ maxLength: 128,
1013
+ value: s,
1014
+ onChange: (k) => o(k.currentTarget.value),
1015
+ placeholder: "原因(可选)"
1016
+ }
1017
+ ),
1018
+ /* @__PURE__ */ a(
1019
+ "textarea",
1020
+ {
1021
+ "aria-label": "反馈说明",
1022
+ maxLength: 4e3,
1023
+ value: d,
1024
+ onChange: (k) => g(k.currentTarget.value),
1025
+ placeholder: "补充说明(可选)"
1026
+ }
1027
+ ),
1028
+ /* @__PURE__ */ a("button", { type: "submit", disabled: f, children: "提交反馈" }),
1029
+ /* @__PURE__ */ a("button", { type: "button", onClick: () => i(!1), children: "取消" })
1030
+ ]
1031
+ }
1032
+ ) : null
1033
+ ] });
1034
+ }
1035
+ const Bt = /* @__PURE__ */ new Set([
1036
+ "image/png",
1037
+ "image/jpeg",
1038
+ "image/webp",
1039
+ "image/gif",
1040
+ "audio/mpeg",
1041
+ "audio/wav",
1042
+ "audio/ogg",
1043
+ "audio/webm",
1044
+ "video/mp4",
1045
+ "video/webm",
1046
+ "video/ogg"
1047
+ ]);
1048
+ function za({
1049
+ part: e,
1050
+ context: t,
1051
+ transport: n,
1052
+ chatId: i
1053
+ }) {
1054
+ const [s, o] = N(), [d, g] = N(), [f, p] = N(!1), k = C([]), $ = C(void 0);
1055
+ ae(
1056
+ () => () => {
1057
+ $.current?.abort(), k.current.forEach((q) => URL.revokeObjectURL(q));
1058
+ },
1059
+ []
1060
+ );
1061
+ const O = async (q) => {
1062
+ if (!n.readContent || f) return;
1063
+ const y = new AbortController();
1064
+ $.current = y, p(!0), g(void 0);
1065
+ try {
1066
+ const V = await n.readContent(
1067
+ t,
1068
+ { chatId: i, contentRef: e.media.contentRef },
1069
+ { signal: y.signal }
1070
+ );
1071
+ if (y.signal.aborted) return;
1072
+ const ee = new Blob([new Uint8Array(V).buffer], {
1073
+ type: q && Bt.has(e.media.contentType) ? e.media.contentType : "application/octet-stream"
1074
+ }), j = URL.createObjectURL(ee);
1075
+ if (k.current.push(j), q) o(j);
1076
+ else {
1077
+ const v = document.createElement("a");
1078
+ v.href = j, v.download = e.name ?? "attachment", v.click();
1079
+ }
1080
+ } catch (V) {
1081
+ y.signal.aborted || g(_t(V));
1082
+ } finally {
1083
+ y.signal.aborted || p(!1);
1084
+ }
1085
+ };
1086
+ return /* @__PURE__ */ c("div", { className: "make-ai-assistant__attachment", children: [
1087
+ /* @__PURE__ */ c("span", { children: [
1088
+ e.name ?? "附件",
1089
+ " · ",
1090
+ e.media.sizeBytes,
1091
+ " 字节"
1092
+ ] }),
1093
+ /* @__PURE__ */ a("button", { type: "button", disabled: f, onClick: () => {
1094
+ O(!1);
1095
+ }, children: "下载附件" }),
1096
+ Bt.has(e.media.contentType) ? /* @__PURE__ */ a("button", { type: "button", disabled: f, onClick: () => {
1097
+ O(!0);
1098
+ }, children: "预览附件" }) : null,
1099
+ d ? /* @__PURE__ */ a("span", { role: "alert", children: d }) : null,
1100
+ s && e.kind === "image" ? /* @__PURE__ */ a("img", { src: s, alt: e.name ?? "附件图片" }) : null,
1101
+ s && e.kind === "audio" ? /* @__PURE__ */ a("audio", { src: s, controls: !0 }) : null,
1102
+ s && e.kind === "video" ? /* @__PURE__ */ a("video", { src: s, controls: !0 }) : null
1103
+ ] });
1104
+ }
1105
+ function Ha({
1106
+ message: e,
1107
+ context: t,
1108
+ transport: n,
1109
+ chatId: i
1110
+ }) {
1111
+ return /* @__PURE__ */ a(Ae, { children: e.parts?.map(
1112
+ (s, o) => s.kind === "text" ? null : /* @__PURE__ */ a(
1113
+ za,
1114
+ {
1115
+ part: s,
1116
+ context: t,
1117
+ transport: n,
1118
+ chatId: i
1119
+ },
1120
+ s.id ?? `${e.id}:${o}`
1121
+ )
1122
+ ) });
1123
+ }
1124
+ const Oa = (e, t) => new Promise((n, i) => {
1125
+ const s = new FileReader(), o = () => t.removeEventListener("abort", d), d = () => {
1126
+ s.abort(), o(), i(Object.assign(new Error("Read aborted"), { name: "AbortError" }));
1127
+ };
1128
+ if (t.aborted) {
1129
+ d();
1130
+ return;
1131
+ }
1132
+ t.addEventListener("abort", d, { once: !0 }), s.onload = () => {
1133
+ o(), n(new Uint8Array(s.result));
1134
+ }, s.onerror = () => {
1135
+ o(), i(new Error("无法读取文件"));
1136
+ }, s.readAsArrayBuffer(e);
1137
+ });
1138
+ function Wa(e, t, n) {
1139
+ const [i, s] = N([]), o = C(/* @__PURE__ */ new Map()), d = C(Promise.resolve()), g = t.scopeKey?.(e) ?? e.app.id, f = C(g);
1140
+ f.current = g;
1141
+ const p = C(void 0), k = n.enabled && t.features?.attachments === !0, $ = (u, l) => {
1142
+ !o.current.has(u.draft.id) || u.scope !== f.current || (u.draft = { ...u.draft, ...l }, s([...o.current.values()].map((T) => T.draft)));
1143
+ }, O = () => {
1144
+ for (const u of o.current.values()) u.controller.abort();
1145
+ o.current.clear(), s([]), p.current = void 0, d.current = Promise.resolve();
1146
+ };
1147
+ ae(() => (O(), O), [g, t]), ae(() => {
1148
+ p.current && n.chat?.chatId !== p.current && O();
1149
+ }, [n.chat?.chatId]);
1150
+ const q = async (u) => {
1151
+ const l = u.controller.signal, T = () => {
1152
+ if (l.aborted || u.scope !== f.current || !o.current.has(u.draft.id))
1153
+ throw Object.assign(new Error("Upload aborted"), {
1154
+ name: "AbortError"
1155
+ });
1156
+ };
1157
+ try {
1158
+ if (T(), u.file.size > 64 << 20) throw new Error("文件不能超过 64 MiB");
1159
+ const L = await n.ensureChat();
1160
+ T(), p.current = L.chatId;
1161
+ const re = u.file.type.split(";")[0].trim().toLowerCase() || "application/octet-stream";
1162
+ $(u, { status: "uploading", error: void 0 });
1163
+ let E = u.draft.upload ? await t.getUpload(
1164
+ e,
1165
+ { chatId: L.chatId, uploadId: u.draft.upload.id },
1166
+ { signal: l }
1167
+ ) : await t.startUpload(
1168
+ e,
1169
+ {
1170
+ chatId: L.chatId,
1171
+ fileId: u.draft.fileId,
1172
+ name: u.file.name,
1173
+ contentType: re,
1174
+ sizeBytes: u.file.size
1175
+ },
1176
+ { signal: l }
1177
+ );
1178
+ if (T(), $(u, { upload: E }), E.name !== u.file.name || E.contentType !== re || E.sizeBytes !== u.file.size)
1179
+ throw new Error("上传文件身份不一致");
1180
+ if (E.status !== "ready") {
1181
+ E = await t.getUpload(
1182
+ e,
1183
+ { chatId: L.chatId, uploadId: E.id },
1184
+ { signal: l }
1185
+ ), T();
1186
+ const J = new Set(E.completedParts), K = Math.ceil(u.file.size / E.partSize);
1187
+ for (let D = 0; D < K; D += 1) {
1188
+ if (T(), !J.has(D)) {
1189
+ const X = await Oa(
1190
+ u.file.slice(
1191
+ D * E.partSize,
1192
+ Math.min(u.file.size, (D + 1) * E.partSize)
1193
+ ),
1194
+ l
1195
+ );
1196
+ T(), await t.uploadPart(
1197
+ e,
1198
+ { chatId: L.chatId, uploadId: E.id, part: D, bytes: X },
1199
+ { signal: l }
1200
+ ), T(), J.add(D);
1201
+ }
1202
+ $(u, { progress: J.size / Math.max(K, 1) });
1203
+ }
1204
+ $(u, { status: "completing" }), E = await t.completeUpload(
1205
+ e,
1206
+ { chatId: L.chatId, uploadId: E.id },
1207
+ { signal: l }
1208
+ ), T();
1209
+ }
1210
+ if (E.status !== "ready" || !E.content)
1211
+ throw new Error("上传尚未完成");
1212
+ $(u, { status: "ready", progress: 1, upload: E });
1213
+ } catch (L) {
1214
+ $(u, {
1215
+ status: l.aborted ? "paused" : "failed",
1216
+ error: l.aborted ? void 0 : _t(L)
1217
+ });
1218
+ }
1219
+ }, y = (u) => {
1220
+ if (k) {
1221
+ if (u.length + o.current.size > 32) {
1222
+ n.setError("每条消息最多包含 32 个附件或文本片段");
1223
+ return;
1224
+ }
1225
+ for (const l of u) {
1226
+ const T = {
1227
+ id: We(),
1228
+ fileId: We(),
1229
+ name: l.name,
1230
+ size: l.size,
1231
+ status: "queued",
1232
+ progress: 0
1233
+ }, L = {
1234
+ draft: T,
1235
+ file: l,
1236
+ controller: new AbortController(),
1237
+ scope: g
1238
+ };
1239
+ o.current.set(T.id, L), d.current = d.current.then(() => q(L));
1240
+ }
1241
+ s([...o.current.values()].map((l) => l.draft));
1242
+ }
1243
+ }, V = (u) => {
1244
+ const l = o.current.get(u);
1245
+ !l || !["paused", "failed"].includes(l.draft.status) || (l.controller = new AbortController(), $(l, { status: "queued" }), d.current = d.current.then(() => q(l)));
1246
+ }, ee = (u) => {
1247
+ o.current.get(u)?.controller.abort(), o.current.delete(u), s([...o.current.values()].map((T) => T.draft));
1248
+ }, j = (u) => o.current.get(u)?.controller.abort(), v = i.flatMap((u) => {
1249
+ const l = u.upload;
1250
+ if (u.status !== "ready" || !l?.content) return [];
1251
+ const T = l.contentType.startsWith("image/") && l.contentType !== "image/svg+xml" ? "image" : l.contentType.startsWith("audio/") ? "audio" : l.contentType.startsWith("video/") ? "video" : "file";
1252
+ return [
1253
+ {
1254
+ id: u.id,
1255
+ kind: T,
1256
+ name: l.name,
1257
+ media: {
1258
+ contentRef: l.content.contentRef,
1259
+ contentType: l.contentType,
1260
+ sizeBytes: l.content.sizeBytes,
1261
+ digestSha256: l.content.digestSha256
1262
+ }
1263
+ }
1264
+ ];
1265
+ });
1266
+ return {
1267
+ enabled: k,
1268
+ drafts: i,
1269
+ parts: v,
1270
+ pending: i.some((u) => u.status !== "ready"),
1271
+ add: y,
1272
+ retry: V,
1273
+ remove: ee,
1274
+ pause: j,
1275
+ clear: O
1276
+ };
1277
+ }
1278
+ function Ua({
1279
+ attachments: e,
1280
+ onOpenChange: t,
1281
+ open: n,
1282
+ triggerRef: i
1283
+ }) {
1284
+ const s = C(null), o = C(null), d = C(null);
1285
+ ae(() => {
1286
+ if (!n) return;
1287
+ const f = (p) => {
1288
+ const k = p.target;
1289
+ k instanceof Node && !s.current?.contains(k) && t(!1);
1290
+ };
1291
+ return document.addEventListener("pointerdown", f), () => {
1292
+ document.removeEventListener("pointerdown", f);
1293
+ };
1294
+ }, [t, n]);
1295
+ const g = (f) => {
1296
+ e.add(Array.from(f.files ?? [])), f.value = "", t(!1);
1297
+ };
1298
+ return /* @__PURE__ */ c("div", { className: "make-ai-assistant__attachment-composer", ref: s, children: [
1299
+ /* @__PURE__ */ a(
1300
+ "button",
1301
+ {
1302
+ "aria-expanded": n,
1303
+ "aria-haspopup": "menu",
1304
+ "aria-label": "添加附件",
1305
+ className: "make-ai-assistant__attachment-trigger",
1306
+ ref: i,
1307
+ title: "添加附件",
1308
+ type: "button",
1309
+ onClick: () => t(!n),
1310
+ children: /* @__PURE__ */ a("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: /* @__PURE__ */ a("path", { d: "M12 5v14M5 12h14" }) })
1311
+ }
1312
+ ),
1313
+ n ? /* @__PURE__ */ c(
1314
+ "div",
1315
+ {
1316
+ "aria-label": "附件选项",
1317
+ className: "make-ai-assistant__attachment-menu",
1318
+ role: "menu",
1319
+ children: [
1320
+ /* @__PURE__ */ c(
1321
+ "button",
1322
+ {
1323
+ role: "menuitem",
1324
+ type: "button",
1325
+ onClick: () => o.current?.click(),
1326
+ children: [
1327
+ /* @__PURE__ */ c("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: [
1328
+ /* @__PURE__ */ a("rect", { height: "15", rx: "2", width: "18", x: "3", y: "4.5" }),
1329
+ /* @__PURE__ */ a("circle", { cx: "8.5", cy: "9", r: "1.5" }),
1330
+ /* @__PURE__ */ a("path", { d: "m5.5 17 4.2-4.2 2.8 2.7 2.2-2.1 3.8 3.6" })
1331
+ ] }),
1332
+ /* @__PURE__ */ a("span", { children: "上传图片" })
1333
+ ]
1334
+ }
1335
+ ),
1336
+ /* @__PURE__ */ c(
1337
+ "button",
1338
+ {
1339
+ role: "menuitem",
1340
+ type: "button",
1341
+ onClick: () => d.current?.click(),
1342
+ children: [
1343
+ /* @__PURE__ */ c("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: [
1344
+ /* @__PURE__ */ a("path", { d: "M7 3.5h7l4 4V20H7z" }),
1345
+ /* @__PURE__ */ a("path", { d: "M14 3.5v4h4M10 12h5M10 15h5" })
1346
+ ] }),
1347
+ /* @__PURE__ */ a("span", { children: "上传文件" })
1348
+ ]
1349
+ }
1350
+ )
1351
+ ]
1352
+ }
1353
+ ) : null,
1354
+ /* @__PURE__ */ a(
1355
+ "input",
1356
+ {
1357
+ accept: "image/*",
1358
+ "aria-label": "上传图片",
1359
+ hidden: !0,
1360
+ multiple: !0,
1361
+ ref: o,
1362
+ type: "file",
1363
+ onChange: (f) => g(f.currentTarget)
1364
+ }
1365
+ ),
1366
+ /* @__PURE__ */ a(
1367
+ "input",
1368
+ {
1369
+ "aria-label": "上传文件",
1370
+ hidden: !0,
1371
+ multiple: !0,
1372
+ ref: d,
1373
+ type: "file",
1374
+ onChange: (f) => g(f.currentTarget)
1375
+ }
1376
+ )
1377
+ ] });
1378
+ }
1379
+ function qa({
1380
+ attachments: e
1381
+ }) {
1382
+ return e.drafts.length ? /* @__PURE__ */ a("div", { className: "make-ai-assistant__attachment-drafts", "aria-label": "待发送附件", children: /* @__PURE__ */ a("ul", { children: e.drafts.map((t) => /* @__PURE__ */ c("li", { children: [
1383
+ /* @__PURE__ */ c("span", { children: [
1384
+ t.name,
1385
+ " ·",
1386
+ " ",
1387
+ t.status === "ready" ? "已上传" : t.status === "completing" ? "校验中" : t.status === "paused" ? "已暂停" : t.status === "failed" ? "上传失败" : `${Math.round(t.progress * 100)}%`
1388
+ ] }),
1389
+ t.error ? /* @__PURE__ */ a("span", { role: "alert", children: t.error }) : null,
1390
+ t.status === "failed" || t.status === "paused" ? /* @__PURE__ */ a("button", { type: "button", onClick: () => e.retry(t.id), children: "重试上传" }) : null,
1391
+ t.status === "uploading" ? /* @__PURE__ */ a("button", { type: "button", onClick: () => e.pause(t.id), children: "暂停上传" }) : null,
1392
+ /* @__PURE__ */ a("button", { type: "button", onClick: () => e.remove(t.id), children: "移除附件" })
1393
+ ] }, t.id)) }) }) : null;
1394
+ }
1395
+ const Ka = (e) => `${e}-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`, Va = "Make", ja = [
345
1396
  "总结当前页面数据",
346
1397
  "找出需要关注的记录",
347
1398
  "列出我有权限查看的数据对象"
348
- ], xt = (e, t) => t ?? `${e?.trim() || fa} AI 助手`, va = (e) => e ?? ga, _a = /^只读分析\s*[·•]\s*/u, ya = (e, t) => e?.trim().replace(_a, "").trim() || `当前对象:${t ?? "未命名应用"}`, ka = 480, Et = 1024, ba = 0.72, _t = 16, z = 16, ke = 8, He = (e, t, s) => Math.min(Math.max(e, Math.min(t, s)), s), wa = (e) => typeof e == "number" && Number.isFinite(e) && e > 0 ? e : void 0, Ia = (e, t, s) => {
349
- const r = Math.min(
350
- Et,
351
- s * ba
1399
+ ], Jt = (e, t) => t ?? `${e?.trim() || Va} AI 助手`, Xa = (e) => e ?? ja, Ya = /^只读分析\s*[·•]\s*/u, Za = (e, t) => e?.trim().replace(Ya, "").trim() || `当前对象:${t ?? "未命名应用"}`, Ga = 480, Qt = 1024, Ja = 0.72, zt = 16, be = 16, Ge = 8, vt = (e, t, n) => Math.min(Math.max(e, Math.min(t, n)), n), Qa = (e) => typeof e == "number" && Number.isFinite(e) && e > 0 ? e : void 0, en = (e, t, n) => {
1400
+ const i = Math.min(
1401
+ Qt,
1402
+ n * Ja
352
1403
  );
353
- return Math.max(e, Math.min(t ?? r, s));
354
- }, yt = (e, t, s) => Math.min(Math.max(e, t), Math.max(t, s)), Aa = (e, t, s, r) => {
355
- const n = Math.min(
1404
+ return Math.max(e, Math.min(t ?? i, n));
1405
+ }, Ht = (e, t, n) => Math.min(Math.max(e, t), Math.max(t, n)), tn = (e, t, n, i) => {
1406
+ const s = Math.min(
356
1407
  Math.max(t.width, 1),
357
- Math.max(1, r - z * 2)
1408
+ Math.max(1, i - be * 2)
358
1409
  ), o = Math.min(
359
1410
  Math.max(t.height, 1),
360
- Math.max(1, s - z * 2)
361
- ), l = e.left + e.width / 2, m = e.top + e.height / 2, p = [
1411
+ Math.max(1, n - be * 2)
1412
+ ), d = e.left + e.width / 2, g = e.top + e.height / 2, p = [
362
1413
  {
363
- left: e.right + ke,
1414
+ left: e.right + Ge,
364
1415
  placement: "right",
365
- top: m - o / 2
1416
+ top: g - o / 2
366
1417
  },
367
1418
  {
368
- left: e.left - ke - n,
1419
+ left: e.left - Ge - s,
369
1420
  placement: "left",
370
- top: m - o / 2
1421
+ top: g - o / 2
371
1422
  },
372
1423
  {
373
- left: l - n / 2,
1424
+ left: d - s / 2,
374
1425
  placement: "bottom",
375
- top: e.bottom + ke
1426
+ top: e.bottom + Ge
376
1427
  },
377
1428
  {
378
- left: l - n / 2,
1429
+ left: d - s / 2,
379
1430
  placement: "top",
380
- top: e.top - ke - o
1431
+ top: e.top - Ge - o
381
1432
  }
382
1433
  ].find(
383
- ({ left: M, top: x }) => M >= z && x >= z && M + n <= r - z && x + o <= s - z
1434
+ ({ left: k, top: $ }) => k >= be && $ >= be && k + s <= i - be && $ + o <= n - be
384
1435
  );
385
1436
  return p || {
386
- left: yt(
387
- l - n / 2,
388
- z,
389
- r - z - n
1437
+ left: Ht(
1438
+ d - s / 2,
1439
+ be,
1440
+ i - be - s
390
1441
  ),
391
1442
  placement: "bottom",
392
- top: yt(
393
- e.bottom + ke,
394
- z,
395
- s - z - o
1443
+ top: Ht(
1444
+ e.bottom + Ge,
1445
+ be,
1446
+ n - be - o
396
1447
  )
397
1448
  };
398
- }, Na = (e) => typeof e == "number" ? Number.isFinite(e) ? `${e}px` : void 0 : e?.trim() || void 0;
399
- class w extends Error {
1449
+ }, an = (e) => typeof e == "number" ? Number.isFinite(e) ? `${e}px` : void 0 : e?.trim() || void 0;
1450
+ class G extends Error {
400
1451
  }
401
- const $e = (e, t) => {
1452
+ const ut = (e, t) => {
402
1453
  if (!(typeof e != "object" || e === null))
403
1454
  return e[t];
404
- }, Ma = (e) => {
405
- const t = $e(e, "status");
406
- return typeof t == "number" ? t : $e(
407
- $e(e, "response"),
1455
+ }, nn = (e) => {
1456
+ const t = ut(e, "status");
1457
+ return typeof t == "number" ? t : ut(
1458
+ ut(e, "response"),
408
1459
  "status"
409
1460
  );
410
- }, Ta = (e) => {
411
- const t = $e(e, "code"), s = Ma(e), r = e instanceof Error ? e.message : "", n = [t, r].filter((g) => typeof g == "string").join(" ").toLowerCase(), l = globalThis.navigator?.onLine === !1 || /network|fetch|timeout|offline|connection|网络|连接|超时/.test(n), m = typeof s == "number" && s >= 500 || /server|service|服务器|服务异常/.test(n);
412
- return l ? {
1461
+ }, sn = (e) => {
1462
+ const t = ut(e, "code"), n = nn(e), i = e instanceof Error ? e.message : "", s = [t, i].filter((f) => typeof f == "string").join(" ").toLowerCase(), d = globalThis.navigator?.onLine === !1 || /network|fetch|timeout|offline|connection|网络|连接|超时/.test(s), g = typeof n == "number" && n >= 500 || /server|service|服务器|服务异常/.test(s);
1463
+ return d ? {
413
1464
  actionLabel: "重新连接",
414
1465
  description: "请检查网络后再试。",
415
1466
  kind: "network",
416
1467
  label: "网络连接",
417
1468
  title: "网络连接不可用"
418
- } : m ? {
1469
+ } : g ? {
419
1470
  actionLabel: "重新加载",
420
1471
  description: "服务暂时未能响应,请稍后重试。",
421
1472
  kind: "service",
@@ -428,13 +1479,13 @@ const $e = (e, t) => {
428
1479
  label: "加载异常",
429
1480
  title: "暂时无法加载对话"
430
1481
  };
431
- }, kt = (e) => {
1482
+ }, Ot = (e) => {
432
1483
  try {
433
1484
  const t = e?.return?.();
434
1485
  if (!t) return;
435
- Promise.resolve(t).catch((s) => {
1486
+ Promise.resolve(t).catch((n) => {
436
1487
  console.error("[make-ai-assistant] transport iterator close failed", {
437
- errorType: s instanceof Error ? s.name : typeof s
1488
+ errorType: n instanceof Error ? n.name : typeof n
438
1489
  });
439
1490
  });
440
1491
  } catch (t) {
@@ -442,7 +1493,7 @@ const $e = (e, t) => {
442
1493
  errorType: t instanceof Error ? t.name : typeof t
443
1494
  });
444
1495
  }
445
- }, xa = async (e) => {
1496
+ }, rn = async (e) => {
446
1497
  if (globalThis.navigator?.clipboard?.writeText) {
447
1498
  await globalThis.navigator.clipboard.writeText(e);
448
1499
  return;
@@ -451,295 +1502,298 @@ const $e = (e, t) => {
451
1502
  throw new Error("Clipboard API is unavailable");
452
1503
  const t = document.createElement("textarea");
453
1504
  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();
454
- const s = document.execCommand("copy");
455
- if (t.remove(), !s)
1505
+ const n = document.execCommand("copy");
1506
+ if (t.remove(), !n)
456
1507
  throw new Error("Clipboard copy failed");
457
- }, Rt = () => /* @__PURE__ */ i("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: [
1508
+ }, ea = () => /* @__PURE__ */ c("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: [
458
1509
  /* @__PURE__ */ a("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" }),
459
1510
  /* @__PURE__ */ a("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" })
460
- ] }), Ea = () => /* @__PURE__ */ a("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: /* @__PURE__ */ a("path", { d: "m6 6 12 12M18 6 6 18" }) }), Ra = () => /* @__PURE__ */ i("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: [
1511
+ ] }), on = () => /* @__PURE__ */ a("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: /* @__PURE__ */ a("path", { d: "m6 6 12 12M18 6 6 18" }) }), cn = () => /* @__PURE__ */ c("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: [
461
1512
  /* @__PURE__ */ a("path", { d: "M8 8h10v12H8z" }),
462
1513
  /* @__PURE__ */ a("path", { d: "M6 16H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" })
463
- ] }), Ca = () => /* @__PURE__ */ i("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: [
1514
+ ] }), ln = () => /* @__PURE__ */ c("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: [
464
1515
  /* @__PURE__ */ a("path", { d: "M20 11a8 8 0 0 0-14.7-4.4L4 8" }),
465
1516
  /* @__PURE__ */ a("path", { d: "M4 4v4h4" }),
466
1517
  /* @__PURE__ */ a("path", { d: "M4 13a8 8 0 0 0 14.7 4.4L20 16" }),
467
1518
  /* @__PURE__ */ a("path", { d: "M20 20v-4h-4" })
468
- ] }), Sa = () => /* @__PURE__ */ i("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: [
1519
+ ] }), dn = () => /* @__PURE__ */ c("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: [
469
1520
  /* @__PURE__ */ a("circle", { cx: "12", cy: "12", r: "8" }),
470
1521
  /* @__PURE__ */ a("path", { d: "M9.8 9.4a2.35 2.35 0 1 1 3.93 1.73c-.96.86-1.73 1.42-1.73 2.87" }),
471
1522
  /* @__PURE__ */ a("path", { d: "M12 17h.01" })
472
- ] }), $a = () => /* @__PURE__ */ i("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: [
1523
+ ] }), un = () => /* @__PURE__ */ c("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: [
473
1524
  /* @__PURE__ */ a("path", { d: "M12 4v11" }),
474
1525
  /* @__PURE__ */ a("path", { d: "m7 10 5 5 5-5" }),
475
1526
  /* @__PURE__ */ a("path", { d: "M5 20h14" })
476
- ] }), La = () => /* @__PURE__ */ a("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: /* @__PURE__ */ a("path", { d: "M12 5v14M5 12h14" }) }), Da = () => /* @__PURE__ */ i("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: [
1527
+ ] }), mn = () => /* @__PURE__ */ a("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: /* @__PURE__ */ a("path", { d: "M12 5v14M5 12h14" }) }), hn = () => /* @__PURE__ */ c("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: [
1528
+ /* @__PURE__ */ a("path", { d: "M10 6h9M10 12h9M10 18h9" }),
1529
+ /* @__PURE__ */ a("path", { d: "M5 6h.01M5 12h.01M5 18h.01" })
1530
+ ] }), pn = () => /* @__PURE__ */ a("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: /* @__PURE__ */ a("path", { d: "m7 10 5 5 5-5" }) }), Wt = () => /* @__PURE__ */ c("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: [
477
1531
  /* @__PURE__ */ a("path", { d: "m4 4 17 8-17 8 3-8-3-8Z" }),
478
1532
  /* @__PURE__ */ a("path", { d: "M7 12h14" })
479
- ] }), Ct = () => /* @__PURE__ */ i("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: [
1533
+ ] }), ta = () => /* @__PURE__ */ c("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: [
480
1534
  /* @__PURE__ */ a("path", { d: "M20 11a8 8 0 0 0-14.7-4.4L4 8" }),
481
1535
  /* @__PURE__ */ a("path", { d: "M4 4v4h4" }),
482
1536
  /* @__PURE__ */ a("path", { d: "M4 13a8 8 0 0 0 14.7 4.4L20 16" }),
483
1537
  /* @__PURE__ */ a("path", { d: "M20 20v-4h-4" })
484
- ] }), Fa = () => /* @__PURE__ */ i("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: [
1538
+ ] }), fn = () => /* @__PURE__ */ c("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: [
485
1539
  /* @__PURE__ */ a("circle", { cx: "12", cy: "12", r: "8" }),
486
1540
  /* @__PURE__ */ a("path", { d: "M12 8v4.5" }),
487
1541
  /* @__PURE__ */ a("path", { d: "M12 16h.01" })
488
- ] }), Le = ({ className: e = "" }) => /* @__PURE__ */ a("span", { className: `make-ai-assistant__avatar ${e}`.trim(), "aria-hidden": "true", children: /* @__PURE__ */ a(Rt, {}) }), Pa = ({ src: e }) => e ? /* @__PURE__ */ a("span", { className: "make-ai-assistant__user-avatar", "aria-hidden": "true", children: /* @__PURE__ */ a("img", { alt: "", src: e }) }) : null, Wa = ({
1542
+ ] }), mt = ({ className: e = "" }) => /* @__PURE__ */ a("span", { className: `make-ai-assistant__avatar ${e}`.trim(), "aria-hidden": "true", children: /* @__PURE__ */ a(ea, {}) }), vn = ({ src: e }) => e ? /* @__PURE__ */ a("span", { className: "make-ai-assistant__user-avatar", "aria-hidden": "true", children: /* @__PURE__ */ a("img", { alt: "", src: e }) }) : null, gn = ({
489
1543
  userAvatarUrl: e,
490
1544
  userName: t
491
1545
  }) => {
492
- const s = t?.trim();
493
- return !s && !e ? null : /* @__PURE__ */ i("div", { className: "make-ai-assistant__message-identity", children: [
494
- s ? /* @__PURE__ */ a("span", { className: "make-ai-assistant__message-sender", children: s }) : null,
495
- /* @__PURE__ */ a(Pa, { src: e })
1546
+ const n = t?.trim();
1547
+ return !n && !e ? null : /* @__PURE__ */ c("div", { className: "make-ai-assistant__message-identity", children: [
1548
+ n ? /* @__PURE__ */ a("span", { className: "make-ai-assistant__message-sender", children: n }) : null,
1549
+ /* @__PURE__ */ a(vn, { src: e })
496
1550
  ] });
497
- }, Be = (e) => {
1551
+ }, gt = (e) => {
498
1552
  const t = e.trim();
499
1553
  if (!(!t.startsWith("|") || !t.endsWith("|")))
500
- return t.slice(1, -1).split("|").map((s) => s.trim());
501
- }, Ha = (e) => e.length > 0 && e.every((t) => /^:?-{3,}:?$/.test(t)), Ba = (e, t) => {
502
- const s = Be(e[t] ?? ""), r = Be(e[t + 1] ?? "");
503
- if (!s || !r || s.length !== r.length || !Ha(r))
1554
+ return t.slice(1, -1).split("|").map((n) => n.trim());
1555
+ }, yn = (e) => e.length > 0 && e.every((t) => /^:?-{3,}:?$/.test(t)), bn = (e, t) => {
1556
+ const n = gt(e[t] ?? ""), i = gt(e[t + 1] ?? "");
1557
+ if (!n || !i || n.length !== i.length || !yn(i))
504
1558
  return;
505
- const n = [];
1559
+ const s = [];
506
1560
  let o = t + 2;
507
1561
  for (; o < e.length; ) {
508
- const l = Be(e[o] ?? "");
509
- if (!l || l.length !== s.length) break;
510
- n.push(l), o += 1;
1562
+ const d = gt(e[o] ?? "");
1563
+ if (!d || d.length !== n.length) break;
1564
+ s.push(d), o += 1;
511
1565
  }
512
- return { headers: s, lastIndex: o - 1, rows: n };
513
- }, Oa = (e) => {
514
- const t = [], s = [], r = [], n = [], o = e.replace(/\r\n?/g, `
1566
+ return { headers: n, lastIndex: o - 1, rows: s };
1567
+ }, kn = (e) => {
1568
+ const t = [], n = [], i = [], s = [], o = e.replace(/\r\n?/g, `
515
1569
  `).split(`
516
- `), l = () => {
517
- const p = s.join(`
1570
+ `), d = () => {
1571
+ const p = n.join(`
518
1572
  `).trim();
519
- s.length = 0, p && t.push({ type: "paragraph", text: p });
520
- }, m = () => {
521
- r.length && t.push({ type: "list", items: r.splice(0) });
1573
+ n.length = 0, p && t.push({ type: "paragraph", text: p });
522
1574
  }, g = () => {
523
- const p = n.join(`
1575
+ i.length && t.push({ type: "list", items: i.splice(0) });
1576
+ }, f = () => {
1577
+ const p = s.join(`
524
1578
  `).trim();
525
- n.length = 0, p && t.push({ type: "pre", text: p });
1579
+ s.length = 0, p && t.push({ type: "pre", text: p });
526
1580
  };
527
1581
  for (let p = 0; p < o.length; p += 1) {
528
- const M = o[p] ?? "", x = M.trim();
529
- if (!x) {
530
- l(), m(), g();
1582
+ const k = o[p] ?? "", $ = k.trim();
1583
+ if (!$) {
1584
+ d(), g(), f();
531
1585
  continue;
532
1586
  }
533
- const H = Ba(o, p);
534
- if (H) {
535
- l(), m(), g(), t.push({ headers: H.headers, rows: H.rows, type: "table" }), p = H.lastIndex;
1587
+ const O = bn(o, p);
1588
+ if (O) {
1589
+ d(), g(), f(), t.push({ headers: O.headers, rows: O.rows, type: "table" }), p = O.lastIndex;
536
1590
  continue;
537
1591
  }
538
- const C = /^(#{1,6})\s+(.+)$/.exec(x);
539
- if (C) {
540
- l(), m(), g();
541
- const L = (C[2] ?? "").replace(/\s+#+\s*$/, "").trim();
542
- L && t.push({
1592
+ const q = /^(#{1,6})\s+(.+)$/.exec($);
1593
+ if (q) {
1594
+ d(), g(), f();
1595
+ const V = (q[2] ?? "").replace(/\s+#+\s*$/, "").trim();
1596
+ V && t.push({
543
1597
  type: "heading",
544
- level: C[1]?.length,
545
- text: L
1598
+ level: q[1]?.length,
1599
+ text: V
546
1600
  });
547
1601
  continue;
548
1602
  }
549
- if (/^\s*\|.+\|\s*$/.test(M)) {
550
- l(), m(), n.push(M.trim());
1603
+ if (/^\s*\|.+\|\s*$/.test(k)) {
1604
+ d(), g(), s.push(k.trim());
551
1605
  continue;
552
1606
  }
553
- const I = /^\s*[-*]\s+(.+)$/.exec(M);
554
- if (I) {
555
- l(), g(), r.push(I[1]?.trim() ?? "");
1607
+ const y = /^\s*[-*]\s+(.+)$/.exec(k);
1608
+ if (y) {
1609
+ d(), f(), i.push(y[1]?.trim() ?? "");
556
1610
  continue;
557
1611
  }
558
- m(), g(), s.push(x);
1612
+ g(), f(), n.push($);
559
1613
  }
560
- return l(), m(), g(), t;
561
- }, be = (e) => {
562
- const t = [], s = /(\*\*[^*]+\*\*|`[^`]+`)/g;
563
- let r = 0;
564
- for (const n of e.matchAll(s)) {
565
- const o = n[0], l = n.index ?? 0;
566
- l > r && t.push(e.slice(r, l)), o.startsWith("**") ? t.push(/* @__PURE__ */ a("strong", { children: o.slice(2, -2) }, `${l}-strong`)) : t.push(/* @__PURE__ */ a("code", { children: o.slice(1, -1) }, `${l}-code`)), r = l + o.length;
1614
+ return d(), g(), f(), t;
1615
+ }, Je = (e) => {
1616
+ const t = [], n = /(\*\*[^*]+\*\*|`[^`]+`)/g;
1617
+ let i = 0;
1618
+ for (const s of e.matchAll(n)) {
1619
+ const o = s[0], d = s.index ?? 0;
1620
+ d > i && t.push(e.slice(i, d)), o.startsWith("**") ? t.push(/* @__PURE__ */ a("strong", { children: o.slice(2, -2) }, `${d}-strong`)) : t.push(/* @__PURE__ */ a("code", { children: o.slice(1, -1) }, `${d}-code`)), i = d + o.length;
567
1621
  }
568
- return r < e.length && t.push(e.slice(r)), t;
569
- }, za = ({ content: e }) => {
570
- const t = Oa(e);
571
- return t.length ? /* @__PURE__ */ a("div", { className: "make-ai-assistant__bubble make-ai-assistant__assistant-text", children: t.map((s, r) => {
572
- if (s.type === "heading") {
573
- const n = s.level <= 2 ? "h3" : "h4";
1622
+ return i < e.length && t.push(e.slice(i)), t;
1623
+ }, Ut = ({ content: e }) => {
1624
+ const t = kn(e);
1625
+ return t.length ? /* @__PURE__ */ a("div", { className: "make-ai-assistant__bubble make-ai-assistant__assistant-text", children: t.map((n, i) => {
1626
+ if (n.type === "heading") {
1627
+ const s = n.level <= 2 ? "h3" : "h4";
574
1628
  return /* @__PURE__ */ a(
575
- n,
1629
+ s,
576
1630
  {
577
- className: `make-ai-assistant__markdown-heading make-ai-assistant__markdown-heading--${s.level}`,
578
- children: be(s.text)
1631
+ className: `make-ai-assistant__markdown-heading make-ai-assistant__markdown-heading--${n.level}`,
1632
+ children: Je(n.text)
579
1633
  },
580
- `${r}-heading`
1634
+ `${i}-heading`
581
1635
  );
582
1636
  }
583
- return s.type === "paragraph" ? /* @__PURE__ */ a("p", { children: be(s.text) }, `${r}-paragraph`) : s.type === "pre" ? /* @__PURE__ */ a("pre", { children: /* @__PURE__ */ a("code", { children: s.text }) }, `${r}-pre`) : s.type === "table" ? /* @__PURE__ */ a(
1637
+ return n.type === "paragraph" ? /* @__PURE__ */ a("p", { children: Je(n.text) }, `${i}-paragraph`) : n.type === "pre" ? /* @__PURE__ */ a("pre", { children: /* @__PURE__ */ a("code", { children: n.text }) }, `${i}-pre`) : n.type === "table" ? /* @__PURE__ */ a(
584
1638
  "div",
585
1639
  {
586
1640
  "aria-label": "表格内容,可横向滚动",
587
1641
  className: "make-ai-assistant__markdown-table-scroll",
588
1642
  role: "region",
589
1643
  tabIndex: 0,
590
- children: /* @__PURE__ */ i("table", { className: "make-ai-assistant__markdown-table", children: [
591
- /* @__PURE__ */ a("thead", { children: /* @__PURE__ */ a("tr", { children: s.headers.map((n, o) => /* @__PURE__ */ a("th", { scope: "col", children: be(n) }, `${o}-${n}`)) }) }),
592
- /* @__PURE__ */ a("tbody", { children: s.rows.map((n, o) => /* @__PURE__ */ a("tr", { children: n.map((l, m) => /* @__PURE__ */ a("td", { children: be(l) }, `${m}-${l}`)) }, `${o}-${n.join("|")}`)) })
1644
+ children: /* @__PURE__ */ c("table", { className: "make-ai-assistant__markdown-table", children: [
1645
+ /* @__PURE__ */ a("thead", { children: /* @__PURE__ */ a("tr", { children: n.headers.map((s, o) => /* @__PURE__ */ a("th", { scope: "col", children: Je(s) }, `${o}-${s}`)) }) }),
1646
+ /* @__PURE__ */ a("tbody", { children: n.rows.map((s, o) => /* @__PURE__ */ a("tr", { children: s.map((d, g) => /* @__PURE__ */ a("td", { children: Je(d) }, `${g}-${d}`)) }, `${o}-${s.join("|")}`)) })
593
1647
  ] })
594
1648
  },
595
- `${r}-table`
596
- ) : /* @__PURE__ */ a("ul", { children: s.items.map((n, o) => /* @__PURE__ */ a("li", { children: be(n) }, `${o}-${n}`)) }, `${r}-list`);
1649
+ `${i}-table`
1650
+ ) : /* @__PURE__ */ a("ul", { children: n.items.map((s, o) => /* @__PURE__ */ a("li", { children: Je(s) }, `${o}-${s}`)) }, `${i}-list`);
597
1651
  }) }) : null;
598
- }, St = ({ assistantName: e }) => /* @__PURE__ */ i("div", { className: "make-ai-assistant__message-identity", children: [
599
- /* @__PURE__ */ a(Le, { className: "make-ai-assistant__avatar--message" }),
1652
+ }, aa = ({ assistantName: e }) => /* @__PURE__ */ c("div", { className: "make-ai-assistant__message-identity", children: [
1653
+ /* @__PURE__ */ a(mt, { className: "make-ai-assistant__avatar--message" }),
600
1654
  /* @__PURE__ */ a("span", { className: "make-ai-assistant__message-sender", children: e })
601
- ] }), $t = (e) => {
1655
+ ] }), na = (e) => {
602
1656
  for (let t = e.messages.length - 1; t >= 0; t -= 1) {
603
- const s = e.messages[t];
604
- if (s.role === "assistant" && s.status === "streaming")
605
- return s.id;
1657
+ const n = e.messages[t];
1658
+ if (n.role === "assistant" && n.status === "streaming")
1659
+ return n.id;
606
1660
  }
607
- }, Ua = (e) => {
1661
+ }, _n = (e) => {
608
1662
  for (let t = e.messages.length - 1; t >= 0; t -= 1)
609
1663
  if (e.messages[t].role === "user") return t;
610
1664
  return -1;
611
- }, Lt = (e) => {
612
- const t = Ua(e);
1665
+ }, sa = (e) => {
1666
+ const t = _n(e);
613
1667
  if (!(t < 0))
614
- for (let s = e.messages.length - 1; s > t; s -= 1) {
615
- const r = e.messages[s];
616
- if (r.role === "assistant") return r.id;
1668
+ for (let n = e.messages.length - 1; n > t; n -= 1) {
1669
+ const i = e.messages[n];
1670
+ if (i.role === "assistant") return i.id;
617
1671
  }
618
- }, Va = (e) => {
1672
+ }, wn = (e) => {
619
1673
  if (e.status === "idle")
620
1674
  for (let t = e.messages.length - 1; t >= 0; t -= 1) {
621
- const s = e.messages[t];
622
- if (s.role === "assistant" && s.status === "complete")
623
- return s.id;
1675
+ const n = e.messages[t];
1676
+ if (n.role === "assistant" && n.status === "complete")
1677
+ return n.id;
624
1678
  }
625
- }, qa = (e) => {
1679
+ }, In = (e) => {
626
1680
  for (let t = e.messages.length - 1; t >= 0; t -= 1) {
627
- const s = e.messages[t];
628
- if (s.role === "user") return s;
1681
+ const n = e.messages[t];
1682
+ if (n.role === "user") return n;
629
1683
  }
630
- }, Ka = (e, t) => {
631
- const s = e.messages.findIndex(
632
- (r) => r.id === t && r.role === "user"
1684
+ }, An = (e, t) => {
1685
+ const n = e.messages.findIndex(
1686
+ (i) => i.id === t && i.role === "user"
633
1687
  );
634
1688
  return {
635
1689
  ...e,
636
1690
  error: void 0,
637
1691
  progress: void 0,
638
1692
  status: "streaming",
639
- messages: s < 0 ? e.messages : e.messages.slice(0, s + 1)
1693
+ messages: n < 0 ? e.messages : e.messages.slice(0, n + 1)
640
1694
  };
641
- }, ja = (e) => e.scrollHeight - e.scrollTop - e.clientHeight <= 48, bt = (e = "smooth") => globalThis.matchMedia?.("(prefers-reduced-motion: reduce)").matches ? "auto" : e, Oe = (e, t) => {
1695
+ }, Mn = (e) => e.scrollHeight - e.scrollTop - e.clientHeight <= 48, qt = (e = "smooth") => globalThis.matchMedia?.("(prefers-reduced-motion: reduce)").matches ? "auto" : e, yt = (e, t) => {
642
1696
  typeof e.scrollTo == "function" ? e.scrollTo({ top: e.scrollHeight, behavior: t }) : e.scrollTop = e.scrollHeight;
643
- }, Dt = ({
1697
+ }, ra = ({
644
1698
  error: e,
645
1699
  onRetry: t
646
- }) => /* @__PURE__ */ i(
1700
+ }) => /* @__PURE__ */ c(
647
1701
  "div",
648
1702
  {
649
1703
  className: "make-ai-assistant__message-status make-ai-assistant__message-status--error",
650
1704
  "data-error-presentation": "request-failed",
651
1705
  role: "alert",
652
1706
  children: [
653
- /* @__PURE__ */ i("div", { className: "make-ai-assistant__message-status-header", children: [
654
- /* @__PURE__ */ a("span", { className: "make-ai-assistant__message-status-icon", "aria-hidden": "true", children: /* @__PURE__ */ a(Fa, {}) }),
1707
+ /* @__PURE__ */ c("div", { className: "make-ai-assistant__message-status-header", children: [
1708
+ /* @__PURE__ */ a("span", { className: "make-ai-assistant__message-status-icon", "aria-hidden": "true", children: /* @__PURE__ */ a(fn, {}) }),
655
1709
  /* @__PURE__ */ a("strong", { children: "请求未完成" })
656
1710
  ] }),
657
1711
  /* @__PURE__ */ a("span", { className: "make-ai-assistant__message-status-message", children: e.message }),
658
- e.retryable && t ? /* @__PURE__ */ i(
1712
+ e.retryable && t ? /* @__PURE__ */ c(
659
1713
  "button",
660
1714
  {
661
1715
  className: "make-ai-assistant__retry",
662
1716
  type: "button",
663
1717
  onClick: t,
664
1718
  children: [
665
- /* @__PURE__ */ a(Ct, {}),
1719
+ /* @__PURE__ */ a(ta, {}),
666
1720
  "重新发送"
667
1721
  ]
668
1722
  }
669
1723
  ) : null
670
1724
  ]
671
1725
  }
672
- ), Xa = ({
1726
+ ), Tn = ({
673
1727
  error: e,
674
1728
  onRetry: t
675
1729
  }) => {
676
- const s = Ta(e);
677
- return /* @__PURE__ */ i(
1730
+ const n = sn(e);
1731
+ return /* @__PURE__ */ c(
678
1732
  "section",
679
1733
  {
680
1734
  "aria-live": "assertive",
681
1735
  className: "make-ai-assistant__load-failure",
682
- "data-load-failure-kind": s.kind,
1736
+ "data-load-failure-kind": n.kind,
683
1737
  role: "alert",
684
1738
  children: [
685
- /* @__PURE__ */ a("span", { className: "make-ai-assistant__load-failure-icon", "aria-hidden": "true", children: /* @__PURE__ */ i("svg", { viewBox: "0 0 24 24", children: [
1739
+ /* @__PURE__ */ a("span", { className: "make-ai-assistant__load-failure-icon", "aria-hidden": "true", children: /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", children: [
686
1740
  /* @__PURE__ */ a("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" }),
687
1741
  /* @__PURE__ */ a("path", { d: "m9.2 14.8 5.6-5.6M9.2 9.2l5.6 5.6" })
688
1742
  ] }) }),
689
- /* @__PURE__ */ i("div", { className: "make-ai-assistant__load-failure-copy", children: [
690
- /* @__PURE__ */ a("span", { className: "make-ai-assistant__load-failure-label", children: s.label }),
691
- /* @__PURE__ */ a("h3", { children: s.title }),
692
- /* @__PURE__ */ a("p", { children: s.description })
1743
+ /* @__PURE__ */ c("div", { className: "make-ai-assistant__load-failure-copy", children: [
1744
+ /* @__PURE__ */ a("span", { className: "make-ai-assistant__load-failure-label", children: n.label }),
1745
+ /* @__PURE__ */ a("h3", { children: n.title }),
1746
+ /* @__PURE__ */ a("p", { children: n.description })
693
1747
  ] }),
694
- /* @__PURE__ */ i(
1748
+ /* @__PURE__ */ c(
695
1749
  "button",
696
1750
  {
697
1751
  className: "make-ai-assistant__retry make-ai-assistant__retry--primary",
698
1752
  type: "button",
699
1753
  onClick: t,
700
1754
  children: [
701
- /* @__PURE__ */ a(Ct, {}),
702
- s.actionLabel
1755
+ /* @__PURE__ */ a(ta, {}),
1756
+ n.actionLabel
703
1757
  ]
704
1758
  }
705
1759
  )
706
1760
  ]
707
1761
  }
708
1762
  );
709
- }, Ft = ({
1763
+ }, ia = ({
710
1764
  active: e,
711
1765
  steps: t
712
1766
  }) => {
713
1767
  if (!e || !t?.length) return null;
714
- const s = t[t.length - 1] ?? "处理中";
715
- return /* @__PURE__ */ i("details", { className: "make-ai-assistant__process", open: !0, children: [
716
- /* @__PURE__ */ i("summary", { children: [
717
- /* @__PURE__ */ i("span", { className: "make-ai-assistant__progress", role: "status", children: [
1768
+ const n = t[t.length - 1] ?? "处理中";
1769
+ return /* @__PURE__ */ c("details", { className: "make-ai-assistant__process", open: !0, children: [
1770
+ /* @__PURE__ */ c("summary", { children: [
1771
+ /* @__PURE__ */ c("span", { className: "make-ai-assistant__progress", role: "status", children: [
718
1772
  /* @__PURE__ */ a("span", { "aria-hidden": "true" }),
719
- /* @__PURE__ */ a("span", { children: s })
1773
+ /* @__PURE__ */ a("span", { children: n })
720
1774
  ] }),
721
- /* @__PURE__ */ i("span", { className: "make-ai-assistant__process-count", children: [
1775
+ /* @__PURE__ */ c("span", { className: "make-ai-assistant__process-count", children: [
722
1776
  t.length,
723
1777
  " 步"
724
1778
  ] })
725
1779
  ] }),
726
- /* @__PURE__ */ a("ol", { children: t.map((r, n) => /* @__PURE__ */ i(
1780
+ /* @__PURE__ */ a("ol", { children: t.map((i, s) => /* @__PURE__ */ c(
727
1781
  "li",
728
1782
  {
729
- "data-step-active": n === t.length - 1 ? !0 : void 0,
1783
+ "data-step-active": s === t.length - 1 ? !0 : void 0,
730
1784
  children: [
731
1785
  /* @__PURE__ */ a("span", { "aria-hidden": "true" }),
732
- /* @__PURE__ */ a("span", { children: r })
1786
+ /* @__PURE__ */ a("span", { children: i })
733
1787
  ]
734
1788
  },
735
- `${n}-${r}`
1789
+ `${s}-${i}`
736
1790
  )) })
737
1791
  ] });
738
- }, Ya = ({
1792
+ }, Cn = ({
739
1793
  copyFeedback: e,
740
1794
  onCopy: t,
741
- onRegenerate: s
742
- }) => !t && !s ? null : /* @__PURE__ */ i("div", { className: "make-ai-assistant__reply-actions", "aria-label": "回复操作", children: [
1795
+ onRegenerate: n
1796
+ }) => !t && !n ? null : /* @__PURE__ */ c("div", { className: "make-ai-assistant__reply-actions", "aria-label": "回复操作", children: [
743
1797
  t ? /* @__PURE__ */ a(
744
1798
  "button",
745
1799
  {
@@ -748,18 +1802,18 @@ const $e = (e, t) => {
748
1802
  "data-tooltip": "复制",
749
1803
  type: "button",
750
1804
  onClick: t,
751
- children: /* @__PURE__ */ a(Ra, {})
1805
+ children: /* @__PURE__ */ a(cn, {})
752
1806
  }
753
1807
  ) : null,
754
- s ? /* @__PURE__ */ a(
1808
+ n ? /* @__PURE__ */ a(
755
1809
  "button",
756
1810
  {
757
1811
  "aria-label": "重新生成",
758
1812
  className: "make-ai-assistant__reply-action make-ai-assistant__reply-regenerate",
759
1813
  "data-tooltip": "重新生成",
760
1814
  type: "button",
761
- onClick: s,
762
- children: /* @__PURE__ */ a(Ca, {})
1815
+ onClick: n,
1816
+ children: /* @__PURE__ */ a(ln, {})
763
1817
  }
764
1818
  ) : null,
765
1819
  e ? /* @__PURE__ */ a(
@@ -771,732 +1825,833 @@ const $e = (e, t) => {
771
1825
  children: e.message
772
1826
  }
773
1827
  ) : null
774
- ] }), wt = ({
1828
+ ] }), Kt = ({
775
1829
  assistantName: e,
776
1830
  error: t,
777
- onRetry: s,
778
- progress: r
1831
+ onRetry: n,
1832
+ progress: i
779
1833
  }) => {
780
- const n = t ? "error" : "progress";
781
- return t?.message ?? r?.message ? /* @__PURE__ */ a(
1834
+ const s = t ? "error" : "progress";
1835
+ return t?.message ?? i?.message ? /* @__PURE__ */ a(
782
1836
  "article",
783
1837
  {
784
- "aria-label": `${e}的${n === "error" ? "错误消息" : "状态消息"}`,
785
- className: `make-ai-assistant__message make-ai-assistant__message--assistant make-ai-assistant__message--${n}`,
1838
+ "aria-label": `${e}的${s === "error" ? "错误消息" : "状态消息"}`,
1839
+ className: `make-ai-assistant__message make-ai-assistant__message--assistant make-ai-assistant__message--${s}`,
786
1840
  "data-message-role": "assistant",
787
- "data-message-state": n,
788
- children: /* @__PURE__ */ i("div", { className: "make-ai-assistant__message-turn", children: [
789
- /* @__PURE__ */ a(St, { assistantName: e }),
790
- /* @__PURE__ */ a("div", { className: "make-ai-assistant__message-stack", children: t ? /* @__PURE__ */ a(Dt, { error: t, onRetry: s }) : /* @__PURE__ */ a(Ft, { active: !0, steps: r?.steps }) })
1841
+ "data-message-state": s,
1842
+ children: /* @__PURE__ */ c("div", { className: "make-ai-assistant__message-turn", children: [
1843
+ /* @__PURE__ */ a(aa, { assistantName: e }),
1844
+ /* @__PURE__ */ a("div", { className: "make-ai-assistant__message-stack", children: t ? /* @__PURE__ */ a(ra, { error: t, onRetry: n }) : /* @__PURE__ */ a(ia, { active: !0, steps: i?.steps }) })
791
1845
  ] })
792
1846
  }
793
1847
  ) : null;
794
- }, Ga = (e, t, s, r, n, o, l, m, g, p, M, x, H, C) => {
795
- const I = Lt(e), L = $t(e), D = Va(e);
796
- let F;
797
- return e.messages.map((u) => {
798
- const b = u.role === "assistant", Q = F;
799
- b || (F = u);
800
- const q = u.id === L, A = u.id === I ? e.error : void 0, K = u.error ?? A, S = !b && !!(g?.trim() || p), B = b ? l : g?.trim() || "用户", _ = b && u.status === "complete" && !K && (u.content.trim() || u.id === D);
1848
+ }, Nn = (e, t, n, i, s, o, d, g, f, p, k, $, O, q, y, V) => {
1849
+ const ee = sa(e), j = na(e), v = wn(e);
1850
+ let u;
1851
+ return e.messages.map((l) => {
1852
+ if (l.intermediate) return /* @__PURE__ */ c("details", { className: "make-ai-assistant__process", children: [
1853
+ /* @__PURE__ */ a("summary", { children: "处理过程" }),
1854
+ /* @__PURE__ */ a(Ut, { content: l.content })
1855
+ ] }, l.id);
1856
+ const T = l.role === "assistant", L = u;
1857
+ T || (u = l);
1858
+ const re = l.id === j, E = l.id === ee ? e.error : void 0, J = l.error ?? E, K = !T && !!(f?.trim() || p), D = T ? d : f?.trim() || "用户", X = T && l.status === "complete" && !J && (l.content.trim() || l.id === v);
801
1859
  return /* @__PURE__ */ a(
802
1860
  "article",
803
1861
  {
804
- "aria-label": `${B}的消息`,
805
- className: `make-ai-assistant__message make-ai-assistant__message--${u.role}`,
806
- "data-message-role": u.role,
807
- "data-message-state": K ? "error" : void 0,
808
- "data-message-status": u.status,
809
- "data-message-has-identity": b || S ? !0 : void 0,
810
- children: /* @__PURE__ */ i("div", { className: "make-ai-assistant__message-turn", children: [
811
- b ? /* @__PURE__ */ a(St, { assistantName: l }) : S ? /* @__PURE__ */ a(Wa, { userAvatarUrl: p, userName: g }) : null,
812
- /* @__PURE__ */ i("div", { className: "make-ai-assistant__message-stack", children: [
813
- u.content ? b ? /* @__PURE__ */ a(za, { content: u.content }) : /* @__PURE__ */ a("div", { className: "make-ai-assistant__bubble", children: u.content }) : u.status === "streaming" ? /* @__PURE__ */ i("div", { className: "make-ai-assistant__typing", "aria-label": `${l}正在思考`, children: [
1862
+ "aria-label": `${D}的消息`,
1863
+ className: `make-ai-assistant__message make-ai-assistant__message--${l.role}`,
1864
+ "data-message-role": l.role,
1865
+ "data-message-state": J ? "error" : void 0,
1866
+ "data-message-status": l.status,
1867
+ "data-message-has-identity": T || K ? !0 : void 0,
1868
+ children: /* @__PURE__ */ c("div", { className: "make-ai-assistant__message-turn", children: [
1869
+ T ? /* @__PURE__ */ a(aa, { assistantName: d }) : K ? /* @__PURE__ */ a(gn, { userAvatarUrl: p, userName: f }) : null,
1870
+ /* @__PURE__ */ c("div", { className: "make-ai-assistant__message-stack", children: [
1871
+ T && l.responseId && e.responses?.[l.responseId]?.status === "cancelled" ? /* @__PURE__ */ a("p", { className: "make-ai-assistant__response-status", role: "status", children: "已停止生成" }) : null,
1872
+ l.content ? T ? /* @__PURE__ */ a(Ut, { content: l.content }) : /* @__PURE__ */ a("div", { className: "make-ai-assistant__bubble", children: l.content }) : l.status === "streaming" ? /* @__PURE__ */ c("div", { className: "make-ai-assistant__typing", "aria-label": `${d}正在思考`, children: [
814
1873
  /* @__PURE__ */ a("span", {}),
815
1874
  /* @__PURE__ */ a("span", {}),
816
1875
  /* @__PURE__ */ a("span", {})
817
1876
  ] }) : null,
818
- b ? /* @__PURE__ */ a(
819
- Ft,
1877
+ T ? /* @__PURE__ */ a(
1878
+ ia,
820
1879
  {
821
- active: q && e.status === "streaming",
822
- steps: u.progressSteps
1880
+ active: re && e.status === "streaming",
1881
+ steps: l.progressSteps
823
1882
  }
824
1883
  ) : null,
825
- K ? /* @__PURE__ */ a(
826
- Dt,
1884
+ J ? /* @__PURE__ */ a(
1885
+ ra,
827
1886
  {
828
- error: K,
829
- onRetry: A ? m : void 0
1887
+ error: J,
1888
+ onRetry: E ? g : void 0
830
1889
  }
831
1890
  ) : null,
832
- u.artifacts.map((y) => /* @__PURE__ */ a(
833
- sa,
1891
+ l.artifacts.map((ie) => /* @__PURE__ */ a(
1892
+ Ia,
834
1893
  {
835
- artifact: y,
1894
+ artifact: ie,
836
1895
  context: t,
837
- onAction: n,
1896
+ onAction: s,
838
1897
  onActionError: o,
839
- registry: s,
840
- theme: r
1898
+ registry: n,
1899
+ theme: i
841
1900
  },
842
- y.id
1901
+ ie.id
843
1902
  )),
844
- _ ? /* @__PURE__ */ a(
845
- Ya,
1903
+ y && V && e.threadId ? /* @__PURE__ */ a(Ha, { message: l, context: t, transport: V, chatId: e.threadId }) : null,
1904
+ y && V?.features?.feedback ? /* @__PURE__ */ a(Ba, { message: l, manager: y }) : null,
1905
+ X ? /* @__PURE__ */ a(
1906
+ Cn,
846
1907
  {
847
- copyFeedback: M?.messageId === u.id ? {
848
- message: M.message,
849
- status: M.status
1908
+ copyFeedback: k?.messageId === l.id ? {
1909
+ message: k.message,
1910
+ status: k.status
850
1911
  } : void 0,
851
- onCopy: u.content.trim() ? () => H(u.id, u.content) : void 0,
852
- onRegenerate: x && u.id === D && Q ? () => C({
853
- userMessage: Q,
854
- assistantMessage: u
1912
+ onCopy: l.content.trim() ? () => O(l.id, l.content) : void 0,
1913
+ onRegenerate: $ && l.id === v && L ? () => q({
1914
+ userMessage: L,
1915
+ assistantMessage: l
855
1916
  }) : void 0
856
1917
  }
857
1918
  ) : null
858
1919
  ] })
859
1920
  ] })
860
1921
  },
861
- u.id
1922
+ `${e.threadId ?? "local"}:${l.id}`
862
1923
  );
863
1924
  });
864
1925
  };
865
- function Pt({
1926
+ function oa({
866
1927
  assistantName: e = "AI 助手",
867
1928
  brandName: t,
868
- context: s,
869
- onAction: r,
870
- onActionError: n,
1929
+ context: n,
1930
+ onAction: i,
1931
+ onActionError: s,
871
1932
  onClose: o,
872
- onNewConversation: l,
873
- headerHeight: m,
874
- privacyNotice: g,
1933
+ onNewConversation: d,
1934
+ headerHeight: g,
1935
+ privacyNotice: f,
875
1936
  registry: p,
876
- subtitle: M,
877
- suggestions: x,
878
- title: H,
879
- theme: C,
880
- transport: I,
881
- userAvatarUrl: L,
882
- userName: D,
883
- visible: F
1937
+ subtitle: k,
1938
+ suggestions: $,
1939
+ title: O,
1940
+ theme: q,
1941
+ transport: y,
1942
+ userAvatarUrl: V,
1943
+ userName: ee,
1944
+ visible: j
884
1945
  }) {
885
- const u = xt(t, H), b = g?.trim(), Q = ya(M, s.app.name), q = Na(m), A = ze(C), K = A || q ? {
886
- ...A,
887
- ...q ? { "--make-ai-internal-header-height": q } : {}
888
- } : void 0, [S, B] = E(""), [_, y] = E(Re), J = T(_);
889
- J.current = _;
890
- const [ee, te] = E(void 0), [De, j] = E(void 0), [Fe, he] = E(0), [U, h] = E(() => I.loadConversation ? "loading" : "ready"), [N, P] = E(void 0), [we, X] = E(!1), [ne, Ue] = E(!1), [pe, Ve] = E(void 0), re = T(void 0), ie = T(void 0), oe = T(0), qe = T(null), fe = T(null), Ke = T(null), je = T(null), Xe = T(null), Ye = T(null), Y = T(!0), Ge = T(s.app.id), Ze = T(F), Qe = Qt(), Je = gt(
891
- () => p ?? ha(),
1946
+ const v = La(n, y), u = Wa(n, y, v), l = Jt(t, O), T = f?.trim(), L = Za(k, n.app.name), re = an(g), E = kt(q), J = E || re ? {
1947
+ ...E,
1948
+ ...re ? { "--make-ai-internal-header-height": re } : {}
1949
+ } : void 0, [K, D] = N(""), [X, ie] = N(!1), [oe, pe] = N(!1), Me = v.enabled ? y.scopeKey?.(n) ?? n.app.id : "";
1950
+ bt(() => {
1951
+ v.enabled && D("");
1952
+ }, [Me, v.enabled]);
1953
+ const [Te, Y] = N(he), w = v.enabled ? v.state : Te, b = v.enabled ? v.setState : Y, H = C(w);
1954
+ H.current = w;
1955
+ const [Z, te] = N(void 0), [De, S] = N(void 0), [ne, ce] = N(0), [fe, Ce] = N(() => y.loadConversation ? "loading" : "ready"), Q = v.enabled ? v.loading && !w.messages.length ? "loading" : "ready" : fe, [ke, Ne] = N(void 0), [Qe, de] = N(!1), [ve, et] = N(!1), [Re, tt] = N(void 0), Ee = C(void 0), Se = C(void 0), xe = C(0), at = C(null), Pe = C(null), nt = C(null), $e = C(null), r = C(null), h = C(null), _ = C(null), A = C(null), M = C(!0), x = C(n.app.id), I = C(j), W = Dt(), z = Dt(), B = Pt(
1956
+ () => p ?? $a(),
892
1957
  [p]
893
- ), et = gt(
894
- () => va(x),
895
- [x]
896
- ), tt = () => {
897
- const c = je.current, v = Xe.current;
898
- if (!c || !v || typeof window > "u") return;
899
- const f = Aa(
900
- c.getBoundingClientRect(),
901
- v.getBoundingClientRect(),
1958
+ ), ge = Pt(
1959
+ () => Xa($),
1960
+ [$]
1961
+ ), Ke = () => {
1962
+ const m = h.current, P = _.current;
1963
+ if (!m || !P || typeof window > "u") return;
1964
+ const F = tn(
1965
+ m.getBoundingClientRect(),
1966
+ P.getBoundingClientRect(),
902
1967
  window.innerHeight,
903
1968
  window.innerWidth
904
1969
  );
905
- Ve(
906
- (k) => k?.left === f.left && k.top === f.top && k.placement === f.placement ? k : f
1970
+ tt(
1971
+ (U) => U?.left === F.left && U.top === F.top && U.placement === F.placement ? U : F
907
1972
  );
908
- }, at = () => Ue(!0), st = () => Ue(!1), Wt = pe ? {
909
- left: `${pe.left}px`,
910
- top: `${pe.top}px`
1973
+ }, Ve = () => et(!0), ue = () => et(!1), Be = Re ? {
1974
+ left: `${Re.left}px`,
1975
+ top: `${Re.top}px`
911
1976
  } : void 0;
912
- It(() => {
913
- if (!ne || !b) {
914
- Ve(void 0);
1977
+ bt(() => {
1978
+ if (!ve || !T) {
1979
+ tt(void 0);
915
1980
  return;
916
1981
  }
917
- tt();
918
- }, [ne, b]), ae(() => {
919
- if (!ne || !b) return;
920
- const c = () => tt();
921
- return window.addEventListener("resize", c), window.addEventListener("scroll", c, !0), () => {
922
- window.removeEventListener("resize", c), window.removeEventListener("scroll", c, !0);
1982
+ Ke();
1983
+ }, [ve, T]), ae(() => {
1984
+ if (!ve || !T) return;
1985
+ const m = () => Ke();
1986
+ return window.addEventListener("resize", m), window.addEventListener("scroll", m, !0), () => {
1987
+ window.removeEventListener("resize", m), window.removeEventListener("scroll", m, !0);
923
1988
  };
924
- }, [ne, b]);
925
- const Ie = (c) => {
926
- const v = re.current, f = ie.current?.iterator;
927
- return !v && !f ? !1 : (oe.current += 1, re.current = void 0, ie.current = void 0, console.info("[make-ai-assistant] local run cancellation requested", { reason: c }), v?.abort(), kt(f), !0);
1989
+ }, [ve, T]);
1990
+ const _e = (m) => {
1991
+ const P = Ee.current, F = Se.current?.iterator;
1992
+ return !P && !F ? !1 : (xe.current += 1, Ee.current = void 0, Se.current = void 0, console.info("[make-ai-assistant] local run cancellation requested", { reason: m }), P?.abort(), Ot(F), !0);
928
1993
  };
929
1994
  ae(() => () => {
930
- Ie("unmount");
1995
+ _e("unmount");
931
1996
  }, []), ae(() => {
932
- const c = I.loadConversation, v = Ge.current !== s.app.id;
933
- if (Ge.current = s.app.id, Ie("reinitialize"), v && (B(""), Y.current = !0), te(void 0), j(void 0), X(!1), y(Re()), !c) {
934
- P(void 0), h("ready");
1997
+ if (v.enabled) return;
1998
+ const m = y.loadConversation, P = x.current !== n.app.id;
1999
+ if (x.current = n.app.id, _e("reinitialize"), P && (D(""), M.current = !0), te(void 0), S(void 0), de(!1), b(he()), !m) {
2000
+ Ne(void 0), Ce("ready");
935
2001
  return;
936
2002
  }
937
- const f = new AbortController();
938
- return P(void 0), h("loading"), console.info("[make-ai-assistant] conversation load start", {
939
- appId: s.app.id
940
- }), c.call(I, s, { signal: f.signal }).then((k) => {
941
- f.signal.aborted || (y(Re(k)), h("ready"), console.info("[make-ai-assistant] conversation load success", {
942
- appId: s.app.id,
943
- messageCount: k.messages.length
2003
+ const F = new AbortController();
2004
+ return Ne(void 0), Ce("loading"), console.info("[make-ai-assistant] conversation load start", {
2005
+ appId: n.app.id
2006
+ }), m.call(y, n, { signal: F.signal }).then((U) => {
2007
+ F.signal.aborted || (b(he(U)), Ce("ready"), console.info("[make-ai-assistant] conversation load success", {
2008
+ appId: n.app.id,
2009
+ messageCount: U.messages.length
944
2010
  }));
945
- }).catch((k) => {
946
- f.signal.aborted || (console.error("[make-ai-assistant] conversation load failed", {
947
- appId: s.app.id,
948
- errorType: k instanceof Error ? k.name : typeof k
949
- }), P(k), h("error"));
950
- }), () => f.abort();
951
- }, [s.app.id, Fe, I]), ae(() => {
952
- const c = fe.current;
953
- if (!c || !Y.current) return;
954
- X(!1);
955
- const v = requestAnimationFrame(() => {
956
- if (!Y.current) return;
957
- const f = _.status === "streaming" || globalThis.matchMedia?.("(prefers-reduced-motion: reduce)").matches ? "auto" : "smooth";
958
- Oe(c, f);
2011
+ }).catch((U) => {
2012
+ F.signal.aborted || (console.error("[make-ai-assistant] conversation load failed", {
2013
+ appId: n.app.id,
2014
+ errorType: U instanceof Error ? U.name : typeof U
2015
+ }), Ne(U), Ce("error"));
2016
+ }), () => F.abort();
2017
+ }, [n.app.id, ne, y, v.enabled]), ae(() => {
2018
+ const m = Pe.current;
2019
+ if (!m || !M.current) return;
2020
+ de(!1);
2021
+ const P = requestAnimationFrame(() => {
2022
+ if (!M.current) return;
2023
+ const F = w.status === "streaming" || globalThis.matchMedia?.("(prefers-reduced-motion: reduce)").matches ? "auto" : "smooth";
2024
+ yt(m, F);
959
2025
  });
960
- return () => cancelAnimationFrame(v);
961
- }, [_.messages, _.progress, _.status]), ae(() => {
962
- const c = F && !Ze.current;
963
- if (Ze.current = F, !c) return;
964
- const v = requestAnimationFrame(() => {
965
- const f = fe.current;
966
- if (f && Y.current) {
967
- X(!1);
968
- const ge = J.current.status === "streaming" ? "auto" : bt();
969
- Oe(f, ge);
970
- } else f && X(J.current.messages.length > 0);
971
- const k = Ke.current;
972
- (k && !k.disabled ? k : Ye.current ?? qe.current?.querySelector("button:not(:disabled)"))?.focus();
2026
+ return () => cancelAnimationFrame(P);
2027
+ }, [w.messages, w.progress, w.status]), ae(() => {
2028
+ j || (ie(!1), pe(!1));
2029
+ }, [j]), ae(() => {
2030
+ const m = j && !I.current;
2031
+ if (I.current = j, !m) return;
2032
+ const P = requestAnimationFrame(() => {
2033
+ const F = Pe.current;
2034
+ if (F && M.current) {
2035
+ de(!1);
2036
+ const je = H.current.status === "streaming" ? "auto" : qt();
2037
+ yt(F, je);
2038
+ } else F && de(H.current.messages.length > 0);
2039
+ const U = nt.current;
2040
+ (U && !U.disabled ? U : A.current ?? at.current?.querySelector("button:not(:disabled)"))?.focus();
973
2041
  });
974
- return () => cancelAnimationFrame(v);
975
- }, [F]);
976
- const Ht = () => {
977
- const c = fe.current;
978
- if (!c) return;
979
- const v = ja(c);
980
- Y.current = v, X(!v && J.current.messages.length > 0);
981
- }, Bt = () => {
982
- const c = fe.current;
983
- if (!c) return;
984
- Y.current = !0, X(!1);
985
- const v = bt();
986
- Oe(c, v);
987
- }, nt = async (c, v) => {
988
- const f = c.trim(), k = J.current, V = v?.regenerateFrom, ge = I.regenerate;
989
- if (!f || U !== "ready" || k.status === "streaming" || re.current || V && !ge) return;
990
- if (Se(
991
- f,
992
- $.messageCharacters
993
- ) > $.messageCharacters) {
2042
+ return () => cancelAnimationFrame(P);
2043
+ }, [j]);
2044
+ const ca = () => {
2045
+ const m = Pe.current;
2046
+ if (!m) return;
2047
+ const P = Mn(m);
2048
+ M.current = P, de(!P && H.current.messages.length > 0);
2049
+ }, la = () => {
2050
+ const m = Pe.current;
2051
+ if (!m) return;
2052
+ M.current = !0, de(!1);
2053
+ const P = qt();
2054
+ yt(m, P);
2055
+ }, wt = async (m, P) => {
2056
+ const F = m.trim(), U = H.current, we = P?.regenerateFrom, je = y.regenerate;
2057
+ if (!F || Q !== "ready" || U.status === "streaming" || Ee.current || we && !je) return;
2058
+ if (dt(
2059
+ F,
2060
+ le.messageCharacters
2061
+ ) > le.messageCharacters) {
994
2062
  te(
995
- `输入内容过长,请控制在 ${$.messageCharacters} 个字符以内`
2063
+ `输入内容过长,请控制在 ${le.messageCharacters} 个字符以内`
996
2064
  );
997
2065
  return;
998
2066
  }
999
- const Me = {
1000
- id: V?.userMessage.id ?? pa("user"),
1001
- content: f
1002
- }, Te = V ? Ka(k, V.userMessage.id) : ta(k, Me), xe = new AbortController(), ce = oe.current + 1;
1003
- oe.current = ce, re.current = xe, te(void 0), j(void 0), X(!Y.current && k.messages.length > 0), V || B(""), y(Te);
2067
+ const it = {
2068
+ id: we?.userMessage.id ?? Ka("user"),
2069
+ content: F
2070
+ }, ot = we ? An(U, we.userMessage.id) : Xt(U, it), ct = new AbortController(), ze = xe.current + 1;
2071
+ xe.current = ze, Ee.current = ct, te(void 0), S(void 0), de(!M.current && U.messages.length > 0), we || D(""), b(ot);
1004
2072
  try {
1005
- let G = !1, R, ot = 0, ct = 0, lt = 0, Pe = 0, ve = 0;
1006
- const _e = /* @__PURE__ */ new Map(), dt = /* @__PURE__ */ new Set(), mt = /* @__PURE__ */ new Set(
2073
+ let Le = !1, se, Tt = 0, Ct = 0, Nt = 0, ht = 0, Xe = 0;
2074
+ const Ye = /* @__PURE__ */ new Map(), Rt = /* @__PURE__ */ new Set(), Et = /* @__PURE__ */ new Set(
1007
2075
  [
1008
- ...Te.messages.map((Ee) => Ee.id),
1009
- Me.id
2076
+ ...ot.messages.map((lt) => lt.id),
2077
+ it.id
1010
2078
  ]
1011
- ), ye = /* @__PURE__ */ new Set(), ut = ea(Je), ht = { signal: xe.signal };
1012
- let We;
1013
- if (V) {
1014
- if (!ge)
1015
- throw new w("当前 AI 助手不支持重新生成");
1016
- We = ge({
1017
- threadId: Te.threadId,
1018
- message: Me,
2079
+ ), Ze = /* @__PURE__ */ new Set(), St = wa(B), xt = { signal: ct.signal };
2080
+ let pt;
2081
+ if (we) {
2082
+ if (!je)
2083
+ throw new G("当前 AI 助手不支持重新生成");
2084
+ pt = je({
2085
+ threadId: ot.threadId,
2086
+ message: it,
1019
2087
  assistantMessage: {
1020
- id: V.assistantMessage.id,
1021
- content: V.assistantMessage.content
2088
+ id: we.assistantMessage.id,
2089
+ content: we.assistantMessage.content
1022
2090
  },
1023
- context: s,
1024
- capabilities: ut
1025
- }, ht);
2091
+ context: n,
2092
+ capabilities: St
2093
+ }, xt);
1026
2094
  } else
1027
- We = I.run(
2095
+ pt = y.run(
1028
2096
  {
1029
- threadId: Te.threadId,
1030
- message: Me,
1031
- context: s,
1032
- capabilities: ut
2097
+ threadId: ot.threadId,
2098
+ message: it,
2099
+ context: n,
2100
+ capabilities: St
1033
2101
  },
1034
- ht
2102
+ xt
1035
2103
  );
1036
- const pt = We[Symbol.asyncIterator]();
1037
- for (ie.current = { iterator: pt, requestVersion: ce }; ; ) {
1038
- const Ee = await pt.next();
1039
- if (oe.current !== ce || Ee.done) break;
1040
- let d;
2104
+ const $t = pt[Symbol.asyncIterator]();
2105
+ for (Se.current = { iterator: $t, requestVersion: ze }; ; ) {
2106
+ const lt = await $t.next();
2107
+ if (xe.current !== ze || lt.done) break;
2108
+ let R;
1041
2109
  try {
1042
- d = aa(Ee.value);
1043
- } catch (W) {
1044
- throw new w(
1045
- W instanceof Error ? W.message : "Invalid assistant event"
2110
+ R = jt(lt.value);
2111
+ } catch (me) {
2112
+ throw new G(
2113
+ me instanceof Error ? me.message : "Invalid assistant event"
1046
2114
  );
1047
2115
  }
1048
- if (d.type === "message.start") {
1049
- if (R !== void 0 && R !== d.runId)
1050
- throw new w("AI 助手响应 run id 不一致");
1051
- if (R ??= d.runId, ct += 1, ct > $.assistantMessagesPerRun)
1052
- throw new w("AI 助手单次响应消息数量超过限制");
1053
- if (mt.has(d.messageId))
1054
- throw new w("AI 助手响应包含重复的 message id");
1055
- mt.add(d.messageId), ye.add(d.messageId), _e.set(d.messageId, 0);
2116
+ if (R.type === "message.start") {
2117
+ if (se !== void 0 && se !== R.runId)
2118
+ throw new G("AI 助手响应 run id 不一致");
2119
+ if (se ??= R.runId, Ct += 1, Ct > le.assistantMessagesPerRun)
2120
+ throw new G("AI 助手单次响应消息数量超过限制");
2121
+ if (Et.has(R.messageId))
2122
+ throw new G("AI 助手响应包含重复的 message id");
2123
+ Et.add(R.messageId), Ze.add(R.messageId), Ye.set(R.messageId, 0);
1056
2124
  }
1057
- if (d.type === "message.delta") {
1058
- if (!ye.has(d.messageId))
1059
- throw new w("AI 助手响应事件顺序无效");
1060
- const W = _e.get(d.messageId) ?? 0, le = Se(
1061
- d.delta,
1062
- $.messageCharacters - ve
2125
+ if (R.type === "message.delta") {
2126
+ if (!Ze.has(R.messageId))
2127
+ throw new G("AI 助手响应事件顺序无效");
2128
+ const me = Ye.get(R.messageId) ?? 0, He = dt(
2129
+ R.delta,
2130
+ le.messageCharacters - Xe
1063
2131
  );
1064
- if (ve + le > $.messageCharacters)
1065
- throw new w("AI 助手响应文本超过大小限制");
1066
- ve += le, _e.set(
1067
- d.messageId,
1068
- W + le
2132
+ if (Xe + He > le.messageCharacters)
2133
+ throw new G("AI 助手响应文本超过大小限制");
2134
+ Xe += He, Ye.set(
2135
+ R.messageId,
2136
+ me + He
1069
2137
  );
1070
2138
  }
1071
- if (d.type === "message.replace") {
1072
- if (!ye.has(d.messageId))
1073
- throw new w("AI 助手响应事件顺序无效");
1074
- const W = _e.get(d.messageId) ?? 0, le = Se(
1075
- d.content,
1076
- $.messageCharacters
1077
- ), ft = ve - W + le;
1078
- if (ft > $.messageCharacters)
1079
- throw new w("AI 助手响应文本超过大小限制");
1080
- ve = ft, _e.set(d.messageId, le);
2139
+ if (R.type === "message.replace") {
2140
+ if (!Ze.has(R.messageId))
2141
+ throw new G("AI 助手响应事件顺序无效");
2142
+ const me = Ye.get(R.messageId) ?? 0, He = dt(
2143
+ R.content,
2144
+ le.messageCharacters
2145
+ ), Lt = Xe - me + He;
2146
+ if (Lt > le.messageCharacters)
2147
+ throw new G("AI 助手响应文本超过大小限制");
2148
+ Xe = Lt, Ye.set(R.messageId, He);
1081
2149
  }
1082
- if (d.type === "run.progress") {
1083
- if (R !== void 0 && R !== d.runId)
1084
- throw new w("AI 助手响应 run id 不一致");
1085
- if (R ??= d.runId, lt += 1, lt > $.progressStepsPerRun)
1086
- throw new w("AI 助手处理过程数量超过限制");
1087
- const W = Se(
1088
- d.message,
1089
- $.progressCharactersPerRun - Pe
2150
+ if (R.type === "run.progress") {
2151
+ if (se !== void 0 && se !== R.runId)
2152
+ throw new G("AI 助手响应 run id 不一致");
2153
+ if (se ??= R.runId, Nt += 1, Nt > le.progressStepsPerRun)
2154
+ throw new G("AI 助手处理过程数量超过限制");
2155
+ const me = dt(
2156
+ R.message,
2157
+ le.progressCharactersPerRun - ht
1090
2158
  );
1091
- if (Pe + W > $.progressCharactersPerRun)
1092
- throw new w("AI 助手处理过程文本超过大小限制");
1093
- Pe += W;
2159
+ if (ht + me > le.progressCharactersPerRun)
2160
+ throw new G("AI 助手处理过程文本超过大小限制");
2161
+ ht += me;
1094
2162
  }
1095
- if (d.type === "artifact") {
1096
- if (!ye.has(d.messageId))
1097
- throw new w("AI 助手响应事件顺序无效");
1098
- if (ot += 1, ot > $.artifactsPerRun)
1099
- throw new w("AI 助手单次响应 Artifact 数量超过限制");
1100
- if (dt.has(d.artifact.id))
1101
- throw new w("AI 助手响应包含重复的 Artifact id");
1102
- dt.add(d.artifact.id);
2163
+ if (R.type === "artifact") {
2164
+ if (!Ze.has(R.messageId))
2165
+ throw new G("AI 助手响应事件顺序无效");
2166
+ if (Tt += 1, Tt > le.artifactsPerRun)
2167
+ throw new G("AI 助手单次响应 Artifact 数量超过限制");
2168
+ if (Rt.has(R.artifact.id))
2169
+ throw new G("AI 助手响应包含重复的 Artifact id");
2170
+ Rt.add(R.artifact.id);
1103
2171
  }
1104
- if (d.type === "message.complete" && !ye.delete(d.messageId))
1105
- throw new w("AI 助手响应事件顺序无效");
1106
- if (d.type === "run.complete" && R !== void 0 && R !== d.runId)
1107
- throw new w("AI 助手响应 run id 不一致");
1108
- if (d.type === "run.cancelled" && d.runId !== void 0 && R !== void 0 && R !== d.runId)
1109
- throw new w("AI 助手响应 run id 不一致");
1110
- if (y((W) => Ce(W, d)), d.type === "error" || d.type === "run.cancelled" || d.type === "run.complete") {
1111
- G = !0;
2172
+ if (R.type === "message.complete" && !Ze.delete(R.messageId))
2173
+ throw new G("AI 助手响应事件顺序无效");
2174
+ if (R.type === "run.complete" && se !== void 0 && se !== R.runId)
2175
+ throw new G("AI 助手响应 run id 不一致");
2176
+ if (R.type === "run.cancelled" && R.runId !== void 0 && se !== void 0 && se !== R.runId)
2177
+ throw new G("AI 助手响应 run id 不一致");
2178
+ if (b((me) => Ie(me, R)), R.type === "error" || R.type === "run.cancelled" || R.type === "run.complete") {
2179
+ Le = !0;
1112
2180
  break;
1113
2181
  }
1114
2182
  }
1115
- if (!G)
1116
- throw new w("AI 助手流式响应在终止事件前结束");
1117
- } catch (G) {
1118
- if (oe.current !== ce) return;
1119
- if (xe.signal.aborted) {
1120
- y(
1121
- (R) => Ce(R, { type: "run.cancelled" })
2183
+ if (!Le)
2184
+ throw new G("AI 助手流式响应在终止事件前结束");
2185
+ } catch (Le) {
2186
+ if (xe.current !== ze) return;
2187
+ if (ct.signal.aborted) {
2188
+ b(
2189
+ (se) => Ie(se, { type: "run.cancelled" })
1122
2190
  );
1123
2191
  return;
1124
2192
  }
1125
2193
  console.error("[make-ai-assistant] assistant run failed", {
1126
- appId: s.app.id,
1127
- errorType: G instanceof Error ? G.name : typeof G
1128
- }), y(
1129
- (R) => Ce(R, {
2194
+ appId: n.app.id,
2195
+ errorType: Le instanceof Error ? Le.name : typeof Le
2196
+ }), b(
2197
+ (se) => Ie(se, {
1130
2198
  type: "error",
1131
2199
  code: "TRANSPORT_ERROR",
1132
- message: G instanceof w ? G.message : "连接失败,请重试",
2200
+ message: Le instanceof G ? Le.message : "连接失败,请重试",
1133
2201
  retryable: !0
1134
2202
  })
1135
2203
  );
1136
2204
  } finally {
1137
- oe.current === ce && re.current === xe && (re.current = void 0), ie.current?.requestVersion === ce && (kt(ie.current.iterator), ie.current = void 0);
2205
+ xe.current === ze && Ee.current === ct && (Ee.current = void 0), Se.current?.requestVersion === ze && (Ot(Se.current.iterator), Se.current = void 0);
2206
+ }
2207
+ }, st = (m) => {
2208
+ if (v.enabled) {
2209
+ if (u.pending)
2210
+ return te("请等待附件上传完成,或移除失败的附件"), Promise.resolve();
2211
+ if (u.parts.some((U) => !y.features?.modelInputKinds?.includes(U.kind)))
2212
+ return te("当前模型尚未开放此类附件理解,已上传原件可保留或移除"), Promise.resolve();
2213
+ const P = m.trim(), F = u.parts.length ? [...P ? [{ id: We(), kind: "text", text: P }] : [], ...u.parts] : void 0;
2214
+ return D(""), u.clear(), v.send(P, F);
1138
2215
  }
1139
- }, Ae = (c) => nt(c), Ot = (c) => nt(c.userMessage.content, { regenerateFrom: c }), zt = async (c, v) => {
2216
+ return wt(m);
2217
+ }, da = (m) => wt(m.userMessage.content, { regenerateFrom: m }), ua = async (m, P) => {
1140
2218
  try {
1141
- await xa(v), j({ messageId: c, message: "已复制", status: "success" });
1142
- } catch (f) {
2219
+ await rn(P), S({ messageId: m, message: "已复制", status: "success" });
2220
+ } catch (F) {
1143
2221
  console.error("[make-ai-assistant] copy answer failed", {
1144
- errorType: f instanceof Error ? f.name : typeof f
1145
- }), j({ messageId: c, message: "复制失败", status: "error" });
2222
+ errorType: F instanceof Error ? F.name : typeof F
2223
+ }), S({ messageId: m, message: "复制失败", status: "error" });
1146
2224
  }
1147
- }, Ut = (c) => {
1148
- c.preventDefault(), Ae(S);
1149
- }, Vt = (c) => {
1150
- c.key === "Enter" && !c.shiftKey && !c.nativeEvent.isComposing && (c.preventDefault(), Ae(S));
1151
- }, qt = () => {
1152
- Ie("stop") && y(
1153
- (c) => Ce(c, { type: "run.cancelled" })
2225
+ }, ma = (m) => {
2226
+ m.preventDefault(), st(K);
2227
+ }, ha = (m) => {
2228
+ m.key === "Enter" && !m.shiftKey && !m.nativeEvent.isComposing && (m.preventDefault(), st(K));
2229
+ }, pa = () => {
2230
+ if (v.enabled) {
2231
+ v.stop();
2232
+ return;
2233
+ }
2234
+ _e("stop") && b(
2235
+ (m) => Ie(m, { type: "run.cancelled" })
1154
2236
  );
1155
- }, Kt = () => {
1156
- Ie("new-conversation"), B(""), te(void 0), j(void 0), X(!1), Y.current = !0, y(Re()), l?.();
1157
- }, rt = I.features?.remoteCancellation === !1 ? "停止接收" : "停止生成", jt = $t(_), Xt = Lt(_), Ne = qa(_), Yt = typeof I.regenerate == "function" && I.features?.regeneration !== !1, it = () => {
1158
- Ne && Ae(Ne.content);
2237
+ }, It = () => {
2238
+ if (pe(!1), v.enabled) {
2239
+ D(""), v.create(), d?.();
2240
+ return;
2241
+ }
2242
+ _e("new-conversation"), D(""), te(void 0), S(void 0), de(!1), M.current = !0, b(he()), d?.();
2243
+ }, At = v.enabled && v.cancelling.length ? "停止中" : y.features?.remoteCancellation === !1 ? "停止接收" : "停止生成", fa = na(w), va = sa(w), rt = In(w), ga = typeof y.regenerate == "function" && y.features?.regeneration !== !1, Mt = () => {
2244
+ if (v.enabled) {
2245
+ v.retry();
2246
+ return;
2247
+ }
2248
+ rt && st(rt.content);
2249
+ }, ya = (m) => {
2250
+ if (m.key === "Escape" && !(!X && !oe)) {
2251
+ if (m.preventDefault(), m.stopPropagation(), X) {
2252
+ ie(!1), $e.current?.focus();
2253
+ return;
2254
+ }
2255
+ pe(!1), r.current?.focus();
2256
+ }
1159
2257
  };
1160
- return /* @__PURE__ */ i(
2258
+ return /* @__PURE__ */ c(
1161
2259
  "section",
1162
2260
  {
1163
- className: "make-ai-assistant make-ai-assistant__panel",
1164
- ref: qe,
1165
- style: K,
2261
+ className: `make-ai-assistant make-ai-assistant__panel${v.enabled ? " make-ai-assistant__panel--managed" : ""}`,
2262
+ ref: at,
2263
+ style: J,
2264
+ onKeyDown: ya,
2265
+ onDragOver: (m) => {
2266
+ u.enabled && m.dataTransfer.types.includes("Files") && m.preventDefault();
2267
+ },
2268
+ onDrop: (m) => {
2269
+ u.enabled && m.dataTransfer.files.length && (m.preventDefault(), u.add(Array.from(m.dataTransfer.files)));
2270
+ },
1166
2271
  children: [
1167
- /* @__PURE__ */ i("header", { className: "make-ai-assistant__header", children: [
1168
- /* @__PURE__ */ a(Le, {}),
1169
- /* @__PURE__ */ i("div", { className: "make-ai-assistant__header-content", children: [
1170
- /* @__PURE__ */ i("div", { className: "make-ai-assistant__header-title-row", children: [
1171
- /* @__PURE__ */ a("h2", { className: "make-ai-assistant__header-title", title: u, children: u }),
1172
- /* @__PURE__ */ a("span", { className: "make-ai-assistant__read-only-tag", children: "只读" })
1173
- ] }),
1174
- /* @__PURE__ */ i("div", { className: "make-ai-assistant__header-context", children: [
1175
- /* @__PURE__ */ a("p", { title: Q, children: Q }),
1176
- b ? /* @__PURE__ */ i(Z, { children: [
1177
- /* @__PURE__ */ a(
1178
- "span",
1179
- {
1180
- "aria-describedby": Qe,
1181
- "aria-label": `使用提示:${b}`,
1182
- className: "make-ai-assistant__header-context-help",
1183
- "data-tooltip": b,
1184
- ref: je,
1185
- role: "note",
1186
- tabIndex: 0,
1187
- onBlur: st,
1188
- onFocus: at,
1189
- onPointerEnter: at,
1190
- onPointerLeave: st,
1191
- children: /* @__PURE__ */ a(Sa, {})
1192
- }
1193
- ),
1194
- /* @__PURE__ */ a(
1195
- "span",
1196
- {
1197
- "aria-hidden": !ne,
1198
- className: "make-ai-assistant__header-context-tooltip",
1199
- "data-placement": pe?.placement,
1200
- "data-positioned": pe ? !0 : void 0,
1201
- "data-visible": ne || void 0,
1202
- id: Qe,
1203
- ref: Xe,
1204
- role: "tooltip",
1205
- style: Wt,
1206
- children: b
1207
- }
1208
- )
1209
- ] }) : null
2272
+ /* @__PURE__ */ c("header", { className: "make-ai-assistant__header", children: [
2273
+ /* @__PURE__ */ a("div", { className: "make-ai-assistant__header-leading", children: v.enabled ? /* @__PURE__ */ c(
2274
+ "button",
2275
+ {
2276
+ "aria-controls": z,
2277
+ "aria-expanded": oe,
2278
+ "aria-haspopup": "dialog",
2279
+ "aria-label": "任务列表",
2280
+ className: "make-ai-assistant__task-list-trigger",
2281
+ ref: r,
2282
+ type: "button",
2283
+ onClick: () => pe((m) => !m),
2284
+ children: [
2285
+ /* @__PURE__ */ a(hn, {}),
2286
+ /* @__PURE__ */ a("span", { children: "任务列表" }),
2287
+ /* @__PURE__ */ a(pn, {})
2288
+ ]
2289
+ }
2290
+ ) : null }),
2291
+ /* @__PURE__ */ c("div", { className: "make-ai-assistant__header-center", children: [
2292
+ /* @__PURE__ */ a(mt, {}),
2293
+ /* @__PURE__ */ c("div", { className: "make-ai-assistant__header-content", children: [
2294
+ /* @__PURE__ */ c("div", { className: "make-ai-assistant__header-title-row", children: [
2295
+ /* @__PURE__ */ a("h2", { className: "make-ai-assistant__header-title", title: l, children: l }),
2296
+ v.enabled ? /* @__PURE__ */ a("span", { className: "make-ai-assistant__current-conversation", children: v.chat?.title || "新对话" }) : null,
2297
+ /* @__PURE__ */ a("span", { className: "make-ai-assistant__read-only-tag", children: "只读" })
2298
+ ] }),
2299
+ /* @__PURE__ */ c("div", { className: "make-ai-assistant__header-context", children: [
2300
+ /* @__PURE__ */ a("p", { title: L, children: L }),
2301
+ T ? /* @__PURE__ */ c(Ae, { children: [
2302
+ /* @__PURE__ */ a(
2303
+ "span",
2304
+ {
2305
+ "aria-describedby": W,
2306
+ "aria-label": `使用提示:${T}`,
2307
+ className: "make-ai-assistant__header-context-help",
2308
+ "data-tooltip": T,
2309
+ ref: h,
2310
+ role: "note",
2311
+ tabIndex: 0,
2312
+ onBlur: ue,
2313
+ onFocus: Ve,
2314
+ onPointerEnter: Ve,
2315
+ onPointerLeave: ue,
2316
+ children: /* @__PURE__ */ a(dn, {})
2317
+ }
2318
+ ),
2319
+ /* @__PURE__ */ a(
2320
+ "span",
2321
+ {
2322
+ "aria-hidden": !ve,
2323
+ className: "make-ai-assistant__header-context-tooltip",
2324
+ "data-placement": Re?.placement,
2325
+ "data-positioned": Re ? !0 : void 0,
2326
+ "data-visible": ve || void 0,
2327
+ id: W,
2328
+ ref: _,
2329
+ role: "tooltip",
2330
+ style: Be,
2331
+ children: T
2332
+ }
2333
+ )
2334
+ ] }) : null
2335
+ ] })
1210
2336
  ] })
1211
2337
  ] }),
1212
- /* @__PURE__ */ i("div", { className: "make-ai-assistant__header-actions", children: [
1213
- I.features?.newConversation !== !1 ? /* @__PURE__ */ a(
2338
+ /* @__PURE__ */ c("div", { className: "make-ai-assistant__header-actions", children: [
2339
+ y.features?.newConversation !== !1 ? /* @__PURE__ */ a(
1214
2340
  "button",
1215
2341
  {
1216
2342
  "aria-label": "新建对话",
1217
2343
  className: "make-ai-assistant__icon-button",
1218
2344
  type: "button",
1219
- onClick: Kt,
1220
- children: /* @__PURE__ */ a(La, {})
2345
+ onClick: It,
2346
+ children: /* @__PURE__ */ a(mn, {})
1221
2347
  }
1222
2348
  ) : null,
1223
2349
  o ? /* @__PURE__ */ a(
1224
2350
  "button",
1225
2351
  {
1226
- "aria-label": `关闭 ${u}`,
2352
+ "aria-label": `关闭 ${l}`,
1227
2353
  className: "make-ai-assistant__icon-button",
1228
2354
  type: "button",
1229
2355
  onClick: o,
1230
- children: /* @__PURE__ */ a(Ea, {})
2356
+ children: /* @__PURE__ */ a(on, {})
1231
2357
  }
1232
2358
  ) : null
1233
2359
  ] })
1234
2360
  ] }),
1235
- /* @__PURE__ */ i(
2361
+ v.enabled && oe ? /* @__PURE__ */ a(
2362
+ Fa,
2363
+ {
2364
+ id: z,
2365
+ manager: v,
2366
+ triggerRef: r,
2367
+ onDismiss: () => pe(!1),
2368
+ onNewConversation: y.features?.newConversation !== !1 ? It : void 0
2369
+ }
2370
+ ) : null,
2371
+ /* @__PURE__ */ c(
1236
2372
  "div",
1237
2373
  {
1238
2374
  className: "make-ai-assistant__body",
1239
2375
  "aria-live": "polite",
1240
2376
  "aria-relevant": "additions text",
1241
- ref: fe,
2377
+ ref: Pe,
1242
2378
  role: "log",
1243
- onScroll: Ht,
2379
+ onScroll: ca,
1244
2380
  children: [
1245
- U === "loading" ? /* @__PURE__ */ i("div", { className: "make-ai-assistant__empty", role: "status", children: [
1246
- /* @__PURE__ */ a(Le, {}),
2381
+ Q === "loading" ? /* @__PURE__ */ c("div", { className: "make-ai-assistant__empty", role: "status", children: [
2382
+ /* @__PURE__ */ a(mt, {}),
1247
2383
  /* @__PURE__ */ a("h3", { children: "正在恢复对话" }),
1248
2384
  /* @__PURE__ */ a("p", { children: "正在读取当前 App 的历史消息…" })
1249
- ] }) : U === "error" ? /* @__PURE__ */ a("div", { className: "make-ai-assistant__empty", children: /* @__PURE__ */ a(
1250
- Xa,
2385
+ ] }) : Q === "error" ? /* @__PURE__ */ a("div", { className: "make-ai-assistant__empty", children: /* @__PURE__ */ a(
2386
+ Tn,
1251
2387
  {
1252
- error: N,
1253
- onRetry: () => he((c) => c + 1)
2388
+ error: ke,
2389
+ onRetry: () => ce((m) => m + 1)
1254
2390
  }
1255
- ) }) : _.messages.length === 0 ? /* @__PURE__ */ i("div", { className: "make-ai-assistant__empty", children: [
1256
- /* @__PURE__ */ a(Le, {}),
2391
+ ) }) : w.messages.length === 0 ? /* @__PURE__ */ c("div", { className: "make-ai-assistant__empty", children: [
2392
+ /* @__PURE__ */ a(mt, {}),
1257
2393
  /* @__PURE__ */ a("h3", { children: "有什么可以帮你?" }),
1258
2394
  /* @__PURE__ */ a("p", { children: "我会结合当前 App、页面位置和宿主允许的上下文回答,并把过程与结果分开展示。" })
1259
- ] }) : Ga(
1260
- _,
1261
- s,
1262
- Je,
1263
- C,
1264
- r,
2395
+ ] }) : Nn(
2396
+ w,
1265
2397
  n,
2398
+ B,
2399
+ q,
2400
+ i,
2401
+ s,
1266
2402
  e,
1267
- Ne ? it : void 0,
1268
- D,
1269
- L,
2403
+ rt ? Mt : void 0,
2404
+ ee,
2405
+ V,
1270
2406
  De,
1271
- Yt,
1272
- (c, v) => {
1273
- zt(c, v);
2407
+ ga,
2408
+ (m, P) => {
2409
+ ua(m, P);
1274
2410
  },
1275
- (c) => {
1276
- Ot(c);
1277
- }
2411
+ (m) => {
2412
+ da(m);
2413
+ },
2414
+ v.enabled ? v : void 0,
2415
+ y
1278
2416
  ),
1279
- _.progress && !jt ? /* @__PURE__ */ a(
1280
- wt,
2417
+ w.progress && !fa ? /* @__PURE__ */ a(
2418
+ Kt,
1281
2419
  {
1282
2420
  assistantName: e,
1283
- progress: _.progress
2421
+ progress: w.progress
1284
2422
  }
1285
2423
  ) : null,
1286
- _.error && !Xt ? /* @__PURE__ */ a(
1287
- wt,
2424
+ w.error && !va ? /* @__PURE__ */ a(
2425
+ Kt,
1288
2426
  {
1289
2427
  assistantName: e,
1290
- error: _.error,
1291
- onRetry: Ne ? it : void 0
2428
+ error: w.error,
2429
+ onRetry: rt ? Mt : void 0
1292
2430
  }
1293
2431
  ) : null
1294
2432
  ]
1295
2433
  }
1296
2434
  ),
1297
- we ? /* @__PURE__ */ a(
2435
+ Qe ? /* @__PURE__ */ a(
1298
2436
  "button",
1299
2437
  {
1300
2438
  "aria-label": "回到最新消息",
1301
2439
  className: "make-ai-assistant__back-to-latest",
1302
2440
  type: "button",
1303
- onClick: Bt,
1304
- children: /* @__PURE__ */ a($a, {})
2441
+ onClick: la,
2442
+ children: /* @__PURE__ */ a(un, {})
1305
2443
  }
1306
2444
  ) : null,
1307
- /* @__PURE__ */ i("footer", { className: "make-ai-assistant__composer-region", children: [
1308
- U === "ready" && et.length > 0 && _.messages.length === 0 ? /* @__PURE__ */ a("div", { className: "make-ai-assistant__suggestions", "aria-label": "推荐问题", children: et.map((c, v) => /* @__PURE__ */ a(
2445
+ /* @__PURE__ */ c("footer", { className: "make-ai-assistant__composer-region", children: [
2446
+ u.enabled ? /* @__PURE__ */ a(qa, { attachments: u }) : null,
2447
+ Q === "ready" && ge.length > 0 && w.messages.length === 0 ? /* @__PURE__ */ a("div", { className: "make-ai-assistant__suggestions", "aria-label": "推荐问题", children: ge.map((m, P) => /* @__PURE__ */ a(
1309
2448
  "button",
1310
2449
  {
1311
2450
  type: "button",
1312
2451
  onClick: () => {
1313
- Ae(c);
2452
+ st(m);
1314
2453
  },
1315
- children: c
2454
+ children: m
1316
2455
  },
1317
- `${v}-${c}`
2456
+ `${P}-${m}`
1318
2457
  )) }) : null,
1319
- /* @__PURE__ */ i("form", { className: "make-ai-assistant__composer", onSubmit: Ut, children: [
2458
+ /* @__PURE__ */ c("form", { className: "make-ai-assistant__composer", onSubmit: ma, children: [
1320
2459
  /* @__PURE__ */ a(
1321
2460
  "textarea",
1322
2461
  {
1323
2462
  "aria-label": `向 ${e} 提问`,
1324
- "aria-describedby": ee ? "make-ai-composer-error" : void 0,
1325
- "aria-invalid": ee ? !0 : void 0,
2463
+ "aria-describedby": Z ? "make-ai-composer-error" : void 0,
2464
+ "aria-invalid": Z ? !0 : void 0,
1326
2465
  autoFocus: !0,
1327
- disabled: U !== "ready" || _.status === "streaming",
1328
- placeholder: `询问当前 ${s.app.name ?? "App"} 中的数据…`,
1329
- ref: Ke,
2466
+ disabled: Q !== "ready" || !v.enabled && w.status === "streaming",
2467
+ placeholder: `询问当前 ${n.app.name ?? "App"} 中的数据…`,
2468
+ ref: nt,
1330
2469
  rows: 2,
1331
- value: S,
1332
- onChange: (c) => {
1333
- B(c.currentTarget.value), te(void 0);
2470
+ value: K,
2471
+ onChange: (m) => {
2472
+ D(m.currentTarget.value), te(void 0);
1334
2473
  },
1335
- onKeyDown: Vt
2474
+ onKeyDown: ha,
2475
+ onPaste: (m) => {
2476
+ u.enabled && m.clipboardData.files.length && (m.preventDefault(), u.add(Array.from(m.clipboardData.files)));
2477
+ }
1336
2478
  }
1337
2479
  ),
1338
- _.status === "streaming" ? /* @__PURE__ */ a(
1339
- "button",
2480
+ u.enabled ? /* @__PURE__ */ a(
2481
+ Ua,
1340
2482
  {
1341
- "aria-label": rt,
1342
- className: "make-ai-assistant__send make-ai-assistant__send--stop",
1343
- "data-tooltip": rt,
1344
- ref: Ye,
1345
- type: "button",
1346
- onClick: qt,
1347
- children: /* @__PURE__ */ a("span", { "aria-hidden": "true" })
2483
+ attachments: u,
2484
+ open: X,
2485
+ triggerRef: $e,
2486
+ onOpenChange: ie
1348
2487
  }
1349
- ) : /* @__PURE__ */ a(
1350
- "button",
1351
- {
1352
- "aria-label": "发送",
1353
- className: "make-ai-assistant__send",
1354
- disabled: U !== "ready" || !S.trim(),
1355
- type: "submit",
1356
- children: /* @__PURE__ */ a(Da, {})
1357
- }
1358
- )
2488
+ ) : null,
2489
+ /* @__PURE__ */ c("div", { className: "make-ai-assistant__composer-actions", children: [
2490
+ w.status === "streaming" ? /* @__PURE__ */ a(
2491
+ "button",
2492
+ {
2493
+ "aria-label": At,
2494
+ className: "make-ai-assistant__send make-ai-assistant__send--stop",
2495
+ "data-tooltip": At,
2496
+ ref: A,
2497
+ disabled: v.enabled && v.cancelling.includes(w.activeRunId ?? ""),
2498
+ type: "button",
2499
+ onClick: pa,
2500
+ children: /* @__PURE__ */ a("span", { "aria-hidden": "true" })
2501
+ }
2502
+ ) : /* @__PURE__ */ a(
2503
+ "button",
2504
+ {
2505
+ "aria-label": "发送",
2506
+ className: "make-ai-assistant__send",
2507
+ disabled: Q !== "ready" || u.pending || !K.trim() && !u.parts.length,
2508
+ type: "submit",
2509
+ children: /* @__PURE__ */ a(Wt, {})
2510
+ }
2511
+ ),
2512
+ v.enabled && w.status === "streaming" ? /* @__PURE__ */ a("button", { "aria-label": "发送", className: "make-ai-assistant__send", disabled: v.busy || u.pending || !K.trim() && !u.parts.length, type: "submit", children: /* @__PURE__ */ a(Wt, {}) }) : null
2513
+ ] })
1359
2514
  ] }),
1360
- ee ? /* @__PURE__ */ a("p", { id: "make-ai-composer-error", role: "alert", children: ee }) : null,
2515
+ Z ? /* @__PURE__ */ a("p", { id: "make-ai-composer-error", role: "alert", children: Z }) : null,
1361
2516
  /* @__PURE__ */ a("p", { children: "AI 生成的结果可能存在偏差,重要数据请核对明细。" })
1362
2517
  ] })
1363
2518
  ]
1364
2519
  }
1365
2520
  );
1366
2521
  }
1367
- function ts(e) {
1368
- return /* @__PURE__ */ a(Pt, { ...e, visible: !0 });
2522
+ function $n(e) {
2523
+ return /* @__PURE__ */ a(oa, { ...e, visible: !0 });
1369
2524
  }
1370
- function as({
2525
+ function Ln({
1371
2526
  defaultOpen: e = !1,
1372
2527
  hideLauncher: t = !1,
1373
- launcher: s,
1374
- launcherPosition: r = "bottom-right",
1375
- maxDrawerWidth: n,
2528
+ launcher: n,
2529
+ launcherPosition: i = "bottom-right",
2530
+ maxDrawerWidth: s,
1376
2531
  onOpenChange: o,
1377
- open: l,
1378
- ...m
2532
+ open: d,
2533
+ ...g
1379
2534
  }) {
1380
- const g = xt(m.brandName, m.title), [p, M] = E(e), [x, H] = E(
1381
- () => e || l === !0
1382
- ), C = T(null), I = T(null), L = T(void 0), [D, F] = E(), [u, b] = E(ka), [Q, q] = E(!1), A = l ?? p, K = ze(m.theme), S = wa(n), B = () => Ia(
1383
- u,
1384
- S,
1385
- typeof window > "u" ? Et : window.innerWidth
1386
- ), _ = B(), y = D === void 0 ? void 0 : He(D, u, _), J = y === void 0 && S === void 0 ? void 0 : {
1387
- ...y === void 0 ? {} : { "--make-ai-internal-drawer-width": `${y}px` },
1388
- ...S === void 0 ? {} : {
1389
- "--make-ai-internal-drawer-max-width": `max(var(--make-ai-internal-drawer-min-width), ${S}px)`
2535
+ const f = Jt(g.brandName, g.title), [p, k] = N(e), [$, O] = N(
2536
+ () => e || d === !0
2537
+ ), q = C(null), y = C(null), V = C(void 0), [ee, j] = N(), [v, u] = N(Ga), [l, T] = N(!1), L = d ?? p, re = kt(g.theme), E = Qa(s), J = () => en(
2538
+ v,
2539
+ E,
2540
+ typeof window > "u" ? Qt : window.innerWidth
2541
+ ), K = J(), D = ee === void 0 ? void 0 : vt(ee, v, K), X = D === void 0 && E === void 0 ? void 0 : {
2542
+ ...D === void 0 ? {} : { "--make-ai-internal-drawer-width": `${D}px` },
2543
+ ...E === void 0 ? {} : {
2544
+ "--make-ai-internal-drawer-max-width": `max(var(--make-ai-internal-drawer-min-width), ${E}px)`
1390
2545
  }
1391
2546
  };
1392
- It(() => {
1393
- y !== void 0 && y !== D && F(y);
1394
- }, [y, D]);
1395
- const ee = () => {
1396
- if (y !== void 0) return y;
1397
- const h = I.current?.getBoundingClientRect().width;
1398
- return h && Number.isFinite(h) && h > 0 ? h : u;
1399
- }, te = (h) => {
1400
- if (h.button !== 0) return;
1401
- const N = ee(), P = D === void 0 ? N : u;
1402
- b(P), L.current = {
1403
- minimumWidth: P,
1404
- pointerId: h.pointerId,
1405
- startWidth: N,
1406
- startX: h.clientX
1407
- }, q(!0), typeof h.currentTarget.setPointerCapture == "function" && h.currentTarget.setPointerCapture(h.pointerId), h.preventDefault();
1408
- }, De = (h) => {
1409
- const N = L.current;
1410
- if (!N || N.pointerId !== h.pointerId) return;
1411
- const P = He(
1412
- N.startWidth + N.startX - h.clientX,
1413
- N.minimumWidth,
1414
- B()
2547
+ bt(() => {
2548
+ D !== void 0 && D !== ee && j(D);
2549
+ }, [D, ee]);
2550
+ const ie = () => {
2551
+ if (D !== void 0) return D;
2552
+ const b = y.current?.getBoundingClientRect().width;
2553
+ return b && Number.isFinite(b) && b > 0 ? b : v;
2554
+ }, oe = (b) => {
2555
+ if (b.button !== 0) return;
2556
+ const H = ie(), Z = ee === void 0 ? H : v;
2557
+ u(Z), V.current = {
2558
+ minimumWidth: Z,
2559
+ pointerId: b.pointerId,
2560
+ startWidth: H,
2561
+ startX: b.clientX
2562
+ }, T(!0), typeof b.currentTarget.setPointerCapture == "function" && b.currentTarget.setPointerCapture(b.pointerId), b.preventDefault();
2563
+ }, pe = (b) => {
2564
+ const H = V.current;
2565
+ if (!H || H.pointerId !== b.pointerId) return;
2566
+ const Z = vt(
2567
+ H.startWidth + H.startX - b.clientX,
2568
+ H.minimumWidth,
2569
+ J()
1415
2570
  );
1416
- F(P);
1417
- }, j = (h) => {
1418
- const N = L.current;
1419
- !N || N.pointerId !== h.pointerId || (L.current = void 0, q(!1));
1420
- }, Fe = (h) => {
1421
- const N = h.key === "ArrowLeft" ? _t : h.key === "ArrowRight" ? -_t : void 0;
1422
- if (N === void 0) return;
1423
- h.preventDefault();
1424
- const P = ee(), we = D === void 0 ? P : u;
1425
- b(we), F(He(
1426
- P + N,
1427
- we,
1428
- B()
2571
+ j(Z);
2572
+ }, Me = (b) => {
2573
+ const H = V.current;
2574
+ !H || H.pointerId !== b.pointerId || (V.current = void 0, T(!1));
2575
+ }, Te = (b) => {
2576
+ const H = b.key === "ArrowLeft" ? zt : b.key === "ArrowRight" ? -zt : void 0;
2577
+ if (H === void 0) return;
2578
+ b.preventDefault();
2579
+ const Z = ie(), te = ee === void 0 ? Z : v;
2580
+ u(te), j(vt(
2581
+ Z + H,
2582
+ te,
2583
+ J()
1429
2584
  ));
1430
- }, he = (h) => {
1431
- l === void 0 && M(h), o?.(h), h || requestAnimationFrame(() => C.current?.focus());
1432
- }, U = () => he(!A);
2585
+ }, Y = (b) => {
2586
+ d === void 0 && k(b), o?.(b), b || requestAnimationFrame(() => q.current?.focus());
2587
+ }, w = () => Y(!L);
1433
2588
  return ae(() => {
1434
- A && H(!0);
1435
- }, [A]), ae(() => {
1436
- if (!A) return;
1437
- const h = (N) => {
1438
- N.key === "Escape" && (he(!1), requestAnimationFrame(() => C.current?.focus()));
2589
+ L && O(!0);
2590
+ }, [L]), ae(() => {
2591
+ if (!L) return;
2592
+ const b = (H) => {
2593
+ H.key === "Escape" && (Y(!1), requestAnimationFrame(() => q.current?.focus()));
1439
2594
  };
1440
- return document.addEventListener("keydown", h), () => document.removeEventListener("keydown", h);
1441
- }, [o, A]), /* @__PURE__ */ i(
2595
+ return document.addEventListener("keydown", b), () => document.removeEventListener("keydown", b);
2596
+ }, [o, L]), /* @__PURE__ */ c(
1442
2597
  "div",
1443
2598
  {
1444
2599
  className: "make-ai-assistant",
1445
- "data-open": A || void 0,
1446
- style: K,
2600
+ "data-open": L || void 0,
2601
+ style: re,
1447
2602
  children: [
1448
- !t && (!A || s) ? s ? s({ open: A, toggle: U }) : /* @__PURE__ */ i(
2603
+ !t && (!L || n) ? n ? n({ open: L, toggle: w }) : /* @__PURE__ */ c(
1449
2604
  "button",
1450
2605
  {
1451
- "aria-label": A ? `关闭 ${g}` : `打开 ${g}`,
1452
- "aria-expanded": A,
2606
+ "aria-label": L ? `关闭 ${f}` : `打开 ${f}`,
2607
+ "aria-expanded": L,
1453
2608
  className: "make-ai-assistant__launcher",
1454
- "data-launcher-position": r,
1455
- ref: C,
2609
+ "data-launcher-position": i,
2610
+ ref: q,
1456
2611
  type: "button",
1457
- onClick: U,
2612
+ onClick: w,
1458
2613
  children: [
1459
2614
  /* @__PURE__ */ a("span", { className: "make-ai-assistant__launcher-orbit", "aria-hidden": "true" }),
1460
- /* @__PURE__ */ a(Rt, {})
2615
+ /* @__PURE__ */ a(ea, {})
1461
2616
  ]
1462
2617
  }
1463
2618
  ) : null,
1464
- x ? /* @__PURE__ */ i(
2619
+ $ ? /* @__PURE__ */ c(
1465
2620
  "aside",
1466
2621
  {
1467
- "aria-label": g,
2622
+ "aria-label": f,
1468
2623
  "aria-modal": "false",
1469
2624
  className: "make-ai-assistant__drawer",
1470
- "data-resizing": Q || void 0,
1471
- hidden: !A,
1472
- ref: I,
2625
+ "data-resizing": l || void 0,
2626
+ hidden: !L,
2627
+ ref: y,
1473
2628
  role: "dialog",
1474
- style: J,
2629
+ style: X,
1475
2630
  children: [
1476
2631
  /* @__PURE__ */ a(
1477
2632
  "div",
1478
2633
  {
1479
2634
  "aria-label": "调整对话框宽度",
1480
2635
  "aria-orientation": "vertical",
1481
- "aria-valuemax": _,
1482
- "aria-valuemin": u,
1483
- "aria-valuenow": y ?? u,
2636
+ "aria-valuemax": K,
2637
+ "aria-valuemin": v,
2638
+ "aria-valuenow": D ?? v,
1484
2639
  className: "make-ai-assistant__drawer-resize-handle",
1485
2640
  role: "separator",
1486
2641
  tabIndex: 0,
1487
- onKeyDown: Fe,
1488
- onPointerCancel: j,
1489
- onPointerDown: te,
1490
- onPointerMove: De,
1491
- onPointerUp: j
2642
+ onKeyDown: Te,
2643
+ onPointerCancel: Me,
2644
+ onPointerDown: oe,
2645
+ onPointerMove: pe,
2646
+ onPointerUp: Me
1492
2647
  }
1493
2648
  ),
1494
2649
  /* @__PURE__ */ a(
1495
- Pt,
2650
+ oa,
1496
2651
  {
1497
- ...m,
1498
- onClose: () => he(!1),
1499
- visible: A
2652
+ ...g,
2653
+ onClose: () => Y(!1),
2654
+ visible: L
1500
2655
  }
1501
2656
  )
1502
2657
  ]
@@ -1507,24 +2662,24 @@ function as({
1507
2662
  );
1508
2663
  }
1509
2664
  export {
1510
- sa as ArtifactRenderer,
1511
- ts as AssistantPanel,
1512
- os as MAKE_AI_ARTIFACT_KINDS,
1513
- cs as MAKE_AI_ARTIFACT_LIMITS,
1514
- ls as MAKE_AI_ARTIFACT_SCHEMA_VERSION,
1515
- $ as MAKE_AI_CONVERSATION_LIMITS,
1516
- as as MakeAiAssistant,
1517
- ta as appendUserMessage,
1518
- ea as createArtifactCapabilities,
1519
- At as createArtifactTemplateRegistry,
1520
- Re as createAssistantConversationState,
1521
- ha as createPlatformArtifactRegistry,
1522
- rs as extendArtifactTemplateRegistry,
1523
- se as formatArtifactValue,
1524
- ds as parseArtifact,
1525
- aa as parseAssistantEvent,
1526
- ua as platformArtifactTemplates,
1527
- Ce as reduceAssistantEvent,
1528
- Jt as resolveArtifactTemplate,
1529
- ms as validateArtifact
2665
+ Ia as ArtifactRenderer,
2666
+ $n as AssistantPanel,
2667
+ zn as MAKE_AI_ARTIFACT_KINDS,
2668
+ Hn as MAKE_AI_ARTIFACT_LIMITS,
2669
+ On as MAKE_AI_ARTIFACT_SCHEMA_VERSION,
2670
+ le as MAKE_AI_CONVERSATION_LIMITS,
2671
+ Ln as MakeAiAssistant,
2672
+ Xt as appendUserMessage,
2673
+ wa as createArtifactCapabilities,
2674
+ Vt as createArtifactTemplateRegistry,
2675
+ he as createAssistantConversationState,
2676
+ $a as createPlatformArtifactRegistry,
2677
+ Fn as extendArtifactTemplateRegistry,
2678
+ Fe as formatArtifactValue,
2679
+ Wn as parseArtifact,
2680
+ jt as parseAssistantEvent,
2681
+ xa as platformArtifactTemplates,
2682
+ Ie as reduceAssistantEvent,
2683
+ _a as resolveArtifactTemplate,
2684
+ Un as validateArtifact
1530
2685
  };