@blueking/chat-x 2.4.1 → 3.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -63,7 +63,7 @@ export type FunctionCall = {
63
63
  mcpName?: string;
64
64
  name: string;
65
65
  /** 调用类型;function或者不填代表函数调用,mcp 代表 MCP 调用,skill 代表 Skill 加载调用*/
66
- type?: FunctionCallType;
66
+ function_type?: FunctionCallType;
67
67
  };
68
68
  export type FunctionCallType = 'function' | 'mcp' | 'skill';
69
69
  export type GuideMessage = BaseMessage<MessageRole.Guide, string>;
@@ -73,7 +73,9 @@ declare var __VLS_1: {}, __VLS_3: {}, __VLS_15: {}, __VLS_24: {
73
73
  }, __VLS_62: {}, __VLS_86: {
74
74
  models: IModelOption[] | undefined;
75
75
  selectedModel: string | undefined;
76
- }, __VLS_97: {};
76
+ }, __VLS_97: {
77
+ sendDisabledTip: string | undefined;
78
+ };
77
79
  type __VLS_Slots = {} & {
78
80
  top?: (props: typeof __VLS_1) => any;
79
81
  } & {
@@ -91,8 +93,9 @@ type __VLS_Slots = {} & {
91
93
  };
92
94
  declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {
93
95
  focus: () => void;
96
+ getUploadFiles: () => Partial<UploadFile>[];
94
97
  insertMention: (item: IInputMenuItem) => void;
95
- triggerSendMessage: () => Promise<void>;
98
+ triggerSendMessage: () => Promise<boolean>;
96
99
  uploadedArtifacts: import("vue").ComputedRef<AIFileInfo[]>;
97
100
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
98
101
  "update:cite": (value: string) => any;
@@ -2,6 +2,7 @@ import { type InputContent } from '../../../ag-ui/types';
2
2
  import { type IToolBtn, type TagSchema, MessageToolsStatus } from '../../../types';
3
3
  import { type MessageToolsProps } from '../../message-tools/message-tools.vue';
4
4
  import type { UserMessage } from '../../../ag-ui/types/messages';
5
+ import 'tippy.js/dist/tippy.css';
5
6
  export type UserMessageActionsProps = {
6
7
  messageToolsStatus?: MessageToolsStatus;
7
8
  onInputConfirm?: (content: UserMessage['content'], docSchema: TagSchema) => Promise<void>;
@@ -29,10 +29,10 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
29
29
  }>, {
30
30
  width: number | string;
31
31
  height: number | string;
32
- alt: string;
33
- lazy: boolean;
34
32
  showInfo: boolean;
35
33
  preview: boolean;
34
+ alt: string;
35
+ lazy: boolean;
36
36
  previewProps: ImagePreviewConfig;
37
37
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
38
38
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -1,10 +1,16 @@
1
1
  import { type ComputedRef } from 'vue';
2
+ import type { ChatInputUploadResult } from '../components/chat-input/chat-input.vue';
3
+ import type { UploadFile } from '../types';
2
4
  import type { IInputMenuItem } from '../types/input-menu';
3
5
  export declare const GLOBAL_CONFIG_TOKEN: unique symbol;
4
6
  export type AiSizeMode = 'normal' | 'small';
5
7
  export type GlobalConfig = {
6
8
  /** 输入框菜单数据源;消息编辑态的内嵌输入框据此渲染 @ / \ 与 + 号菜单 */
7
9
  menuSources?: ComputedRef<IInputMenuItem[]>;
10
+ /** 取消编辑态草稿里本次新选的附件;与主输入框 `@delete-file` 同源 */
11
+ onDeleteFile?: (file: Partial<UploadFile>) => void;
12
+ /** 编辑态内嵌输入框复用主输入框的上传实现 */
13
+ onUpload?: (files: File[]) => Promise<ChatInputUploadResult | ChatInputUploadResult[]>;
8
14
  size?: ComputedRef<AiSizeMode>;
9
15
  supportUpload: ComputedRef<boolean>;
10
16
  /** IANA 时区名,用于消息时间展示;未配置时按浏览器时区展示 */
@@ -12,6 +18,8 @@ export type GlobalConfig = {
12
18
  };
13
19
  export declare const useGlobalConfig: (options: GlobalConfig) => {
14
20
  menuSources: ComputedRef<IInputMenuItem[]> | undefined;
21
+ onDeleteFile: ((file: Partial<UploadFile>) => void) | undefined;
22
+ onUpload: ((files: File[]) => Promise<ChatInputUploadResult | ChatInputUploadResult[]>) | undefined;
15
23
  size: ComputedRef<AiSizeMode> | undefined;
16
24
  supportUpload: ComputedRef<boolean>;
17
25
  timezone: ComputedRef<string | undefined> | undefined;
@@ -610,7 +610,7 @@ export declare const useMessageGroup: (options: {
610
610
  description?: string | undefined;
611
611
  mcpName?: string | undefined;
612
612
  name: string;
613
- type?: import("..").FunctionCallType | undefined;
613
+ function_type?: import("..").FunctionCallType | undefined;
614
614
  };
615
615
  id: string;
616
616
  toolMessage?: {
@@ -14083,7 +14083,7 @@ export declare const useMessageGroup: (options: {
14083
14083
  description?: string | undefined;
14084
14084
  mcpName?: string | undefined;
14085
14085
  name: string;
14086
- type?: import("..").FunctionCallType | undefined;
14086
+ function_type?: import("..").FunctionCallType | undefined;
14087
14087
  };
14088
14088
  id: string;
14089
14089
  toolMessage?: {
@@ -27563,7 +27563,7 @@ export declare const useMessageGroup: (options: {
27563
27563
  description?: string | undefined;
27564
27564
  mcpName?: string | undefined;
27565
27565
  name: string;
27566
- type?: import("..").FunctionCallType | undefined;
27566
+ function_type?: import("..").FunctionCallType | undefined;
27567
27567
  };
27568
27568
  id: string;
27569
27569
  toolMessage?: {
package/dist/index.js CHANGED
@@ -2302,6 +2302,8 @@ var Ri = () => _(Pi), zi = (() => {
2302
2302
  };
2303
2303
  }, Vi = Symbol("GLOBAL_CONFIG_TOKEN"), Hi = (e) => (j(Vi, e), {
2304
2304
  menuSources: e.menuSources,
2305
+ onDeleteFile: e.onDeleteFile,
2306
+ onUpload: e.onUpload,
2305
2307
  size: e.size,
2306
2308
  supportUpload: e.supportUpload,
2307
2309
  timezone: e.timezone
@@ -8903,7 +8905,7 @@ var Im = { class: "ai-input-attachment" }, Lm = { class: "ai-input-attachment-de
8903
8905
  var e = Z(function* () {
8904
8906
  try {
8905
8907
  var e, t, n, i;
8906
- if (pe.value) return;
8908
+ if (pe.value) return !1;
8907
8909
  (e = r.value) == null || (t = e.cleanup) == null || t.call(e);
8908
8910
  let o;
8909
8911
  if (!((n = b.value) != null && n.length)) o = W.value;
@@ -8925,9 +8927,9 @@ var Im = { class: "ai-input-attachment" }, Lm = { class: "ai-input-attachment-de
8925
8927
  text: W.value
8926
8928
  });
8927
8929
  }
8928
- (i = g.onSendMessage) == null || i.call(g, o, me()), b.value = [];
8930
+ return (i = g.onSendMessage) == null || i.call(g, o, me()), b.value = [], !0;
8929
8931
  } catch (e) {
8930
- console.error(e);
8932
+ return console.error(e), !1;
8931
8933
  }
8932
8934
  });
8933
8935
  return function() {
@@ -9046,6 +9048,7 @@ var Im = { class: "ai-input-attachment" }, Lm = { class: "ai-input-attachment-de
9046
9048
  };
9047
9049
  return t({
9048
9050
  focus: Le,
9051
+ getUploadFiles: () => b.value.slice(),
9049
9052
  insertMention: (e) => {
9050
9053
  var t, n;
9051
9054
  (t = r.value) == null || (n = t.appendMention) == null || n.call(t, e);
@@ -9160,7 +9163,7 @@ var Im = { class: "ai-input-attachment" }, Lm = { class: "ai-input-attachment-de
9160
9163
  "tippy-options"
9161
9164
  ])) : s("", !0)];
9162
9165
  })]),
9163
- "send-icon": U(() => [F(t.$slots, "send-icon")]),
9166
+ "send-icon": U(() => [F(t.$slots, "send-icon", { sendDisabledTip: pe.value })]),
9164
9167
  _: 3
9165
9168
  }, 8, [
9166
9169
  "message-state",
@@ -11144,7 +11147,7 @@ var Im = { class: "ai-input-attachment" }, Lm = { class: "ai-input-attachment-de
11144
11147
  }), y = a(() => !_.value && !v.value), b = a(() => {
11145
11148
  var e, t;
11146
11149
  let r = (e = n.toolCall) == null ? void 0 : e.function;
11147
- return (t = r == null ? void 0 : r.type) == null ? r != null && r.mcpName ? "mcp" : "function" : t;
11150
+ return (t = r == null ? void 0 : r.function_type) == null ? r != null && r.mcpName ? "mcp" : "function" : t;
11148
11151
  }), S = a(() => b.value === "skill" ? G("读取 Skill") : b.value === "mcp" ? G("调用 MCP") : G("调用工具")), T = a(() => b.value === "skill" ? G("正在读取") : G("正在调用")), E = a(() => {
11149
11152
  var e, t;
11150
11153
  let r = (e = n.toolCall) == null ? void 0 : e.function, i = (r == null ? void 0 : r.mcpName) || "", a = (r == null ? void 0 : r.name) || ((t = n.toolCall) == null ? void 0 : t.id) || "";
@@ -11690,19 +11693,30 @@ var Im = { class: "ai-input-attachment" }, Lm = { class: "ai-input-attachment-de
11690
11693
  return function(t) {
11691
11694
  return e.apply(this, arguments);
11692
11695
  };
11693
- }(), T = function() {
11696
+ }(), T = (e) => !!e.file, E = (e) => {
11697
+ var t;
11698
+ T(e) && (r == null || (t = r.onDeleteFile) == null || t.call(r, e));
11699
+ }, D = () => {
11700
+ var e, t, n;
11701
+ ((e = (t = h.value) == null || (n = t.getUploadFiles) == null ? void 0 : n.call(t)) == null ? [] : e).forEach((e) => {
11702
+ if (T(e)) {
11703
+ var t;
11704
+ r == null || (t = r.onDeleteFile) == null || t.call(r, e);
11705
+ }
11706
+ });
11707
+ }, O = function() {
11694
11708
  var e = Z(function* () {
11695
11709
  var e, t;
11696
- yield (e = h.value) == null || (t = e.triggerSendMessage) == null ? void 0 : t.call(e), p.value = !1;
11710
+ (yield (e = h.value) == null || (t = e.triggerSendMessage) == null ? void 0 : t.call(e)) && (p.value = !1);
11697
11711
  });
11698
11712
  return function() {
11699
11713
  return e.apply(this, arguments);
11700
11714
  };
11701
- }(), E = () => {
11702
- p.value = !1;
11703
- }, D = () => {
11704
- p.value = !1;
11705
- }, O = function() {
11715
+ }(), k = () => {
11716
+ D(), p.value = !1;
11717
+ }, j = () => {
11718
+ D(), p.value = !1;
11719
+ }, M = function() {
11706
11720
  var e = Z(function* (e) {
11707
11721
  var t;
11708
11722
  (t = n.onShortcutConfirm) == null || t.call(n, e), p.value = !1;
@@ -11710,7 +11724,7 @@ var Im = { class: "ai-input-attachment" }, Lm = { class: "ai-input-attachment-de
11710
11724
  return function(t) {
11711
11725
  return e.apply(this, arguments);
11712
11726
  };
11713
- }(), k = function() {
11727
+ }(), ee = function() {
11714
11728
  var e = Z(function* (e, t) {
11715
11729
  var r;
11716
11730
  (r = n.onInputConfirm) == null || r.call(n, e, t), p.value = !1;
@@ -11720,15 +11734,15 @@ var Im = { class: "ai-input-attachment" }, Lm = { class: "ai-input-attachment-de
11720
11734
  };
11721
11735
  }();
11722
11736
  return (n, i) => {
11723
- var a, S, j, M;
11737
+ var a, S, T, D, N;
11724
11738
  return A(), c("div", Yy, [_.value && typeof _.value == "string" ? (A(), o(gp, {
11725
11739
  key: 0,
11726
11740
  class: "ai-user-message-cite",
11727
11741
  content: _.value
11728
11742
  }, null, 8, ["content"])) : s("", !0), p.value ? (A(), c(e, { key: 2 }, [v.value ? (A(), o(vi, x({ key: 0 }, v.value, {
11729
11743
  class: "user-shortcut-render",
11730
- onClose: D,
11731
- onSubmit: O
11744
+ onClose: j,
11745
+ onSubmit: M
11732
11746
  }), null, 16)) : (A(), o(uh, {
11733
11747
  key: 1,
11734
11748
  ref_key: "chatInputRef",
@@ -11738,28 +11752,36 @@ var Im = { class: "ai-input-attachment" }, Lm = { class: "ai-input-attachment-de
11738
11752
  class: "user-edit-input",
11739
11753
  "default-upload-files": y.value,
11740
11754
  "menu-sources": (a = (S = z(r)) == null || (S = S.menuSources) == null ? void 0 : S.value) == null ? [] : a,
11741
- "on-send-message": k,
11742
- "support-upload": (j = (M = z(r)) == null ? void 0 : M.supportUpload.value) == null ? !1 : j
11755
+ "on-send-message": ee,
11756
+ "on-upload": (T = z(r)) == null ? void 0 : T.onUpload,
11757
+ "support-upload": (D = (N = z(r)) == null ? void 0 : N.supportUpload.value) == null ? !1 : D,
11758
+ onDeleteFile: E
11743
11759
  }, {
11744
- "send-icon": U(() => [l("div", Zy, [f(z(fe), {
11760
+ "send-icon": U(({ sendDisabledTip: e }) => [l("div", Zy, [f(z(fe), {
11745
11761
  size: "small",
11746
- onClick: E
11762
+ onClick: k
11747
11763
  }, {
11748
11764
  default: U(() => [d(R(z(G)("取消")), 1)]),
11749
11765
  _: 1
11750
- }), f(z(fe), {
11766
+ }), W((A(), c("span", null, [f(z(fe), {
11751
11767
  size: "small",
11752
11768
  theme: "primary",
11753
- onClick: T
11769
+ disabled: !!e,
11770
+ onClick: O
11754
11771
  }, {
11755
11772
  default: U(() => [d(R(z(G)("发送")), 1)]),
11756
11773
  _: 1
11757
- })])]),
11774
+ }, 8, ["disabled"])])), [[z(Te), {
11775
+ content: e,
11776
+ onShow: () => !!e,
11777
+ theme: "ai-chat-box"
11778
+ }]])])]),
11758
11779
  _: 1
11759
11780
  }, 8, [
11760
11781
  "modelValue",
11761
11782
  "default-upload-files",
11762
11783
  "menu-sources",
11784
+ "on-upload",
11763
11785
  "support-upload"
11764
11786
  ]))], 64)) : (A(), c(e, { key: 1 }, [
11765
11787
  y.value.length ? (A(), o($p, {
@@ -12262,6 +12284,8 @@ var Im = { class: "ai-input-attachment" }, Lm = { class: "ai-input-attachment-de
12262
12284
  return (t = O.value) == null || (n = t.insertMention) == null ? void 0 : n.call(t, e);
12263
12285
  } }), Hi({
12264
12286
  menuSources: D,
12287
+ onDeleteFile: (e) => te("deleteFile", e),
12288
+ onUpload: p.onUpload,
12265
12289
  size: a(() => {
12266
12290
  var e;
12267
12291
  return (e = p.size) == null ? "small" : e;
@@ -12390,15 +12414,22 @@ var Im = { class: "ai-input-attachment" }, Lm = { class: "ai-input-attachment-de
12390
12414
  block: "nearest",
12391
12415
  inline: "nearest"
12392
12416
  });
12393
- }, q = (e) => e === "execution" ? Rt : e === "file-artifact" ? Ut : Ht, Je = (e) => {
12417
+ }, Je = (e) => e === "execution" ? Rt : e === "file-artifact" ? Ut : Ht, Ye = (e) => {
12394
12418
  pe(se.value.find((t) => t.name === e));
12395
- }, Ye = (e) => {
12419
+ }, Xe = (e) => {
12396
12420
  ge.value = e;
12397
- }, Xe = function() {
12421
+ }, Ze = (e) => {
12422
+ let t = new Set(e.map((e) => e.id).filter(Boolean));
12423
+ if (!t.size) return [];
12424
+ let n = De.value.findIndex((e) => e.messages.some((e) => t.has(e.id)));
12425
+ if (n <= 0) return [];
12426
+ let r = De.value[n - 1];
12427
+ return (r == null ? void 0 : r.type) === q.User ? [...r.messages] : [];
12428
+ }, Qe = function() {
12398
12429
  var e = Z(function* (e, t) {
12399
12430
  var n;
12400
12431
  if (e.id === "share" || e.triggerSelection) {
12401
- ve.value = e, Ae.value = !0;
12432
+ ve.value = e, _e.value = Ze(t), Ae.value = !0;
12402
12433
  return;
12403
12434
  }
12404
12435
  return (n = p.onAgentAction) == null ? void 0 : n.call(p, e, t);
@@ -12406,15 +12437,15 @@ var Im = { class: "ai-input-attachment" }, Lm = { class: "ai-input-attachment-de
12406
12437
  return function(t, n) {
12407
12438
  return e.apply(this, arguments);
12408
12439
  };
12409
- }(), Ze = () => {
12440
+ }(), $e = () => {
12410
12441
  te("confirmShare", Pe(), ve.value), S(() => {
12411
12442
  Ae.value = !1, _e.value = [], ve.value = void 0;
12412
12443
  });
12413
- }, Qe = () => {
12444
+ }, et = () => {
12414
12445
  Ne(), ve.value = void 0;
12415
- }, $e = (e) => {
12446
+ }, tt = (e) => {
12416
12447
  we.value = !0, xe.value = e, Se.value = e;
12417
- }, et = () => {
12448
+ }, nt = () => {
12418
12449
  we.value = !1;
12419
12450
  };
12420
12451
  return k(() => {
@@ -12428,7 +12459,7 @@ var Im = { class: "ai-input-attachment" }, Lm = { class: "ai-input-attachment-de
12428
12459
  Ae.value = !0;
12429
12460
  },
12430
12461
  exitShareMode: () => {
12431
- Qe();
12462
+ et();
12432
12463
  }
12433
12464
  }), (n, i) => {
12434
12465
  var a;
@@ -12447,8 +12478,8 @@ var Im = { class: "ai-input-attachment" }, Lm = { class: "ai-input-attachment-de
12447
12478
  "is-resizing": we.value
12448
12479
  }]
12449
12480
  }, C.value, {
12450
- onAfterResize: et,
12451
- onResizing: $e
12481
+ onAfterResize: nt,
12482
+ onResizing: tt
12452
12483
  }), {
12453
12484
  aside: U(() => [f(r, { name: "ai-aside-content" }, {
12454
12485
  default: U(() => {
@@ -12464,7 +12495,7 @@ var Im = { class: "ai-input-attachment" }, Lm = { class: "ai-input-attachment-de
12464
12495
  class: "ai-chat-container-tab",
12465
12496
  "label-height": 40,
12466
12497
  type: "unborder-card",
12467
- onChange: Je
12498
+ onChange: Ye
12468
12499
  }, {
12469
12500
  setting: U(() => [l("div", Sb, [f(vo, {
12470
12501
  class: "screen-btn",
@@ -12490,7 +12521,7 @@ var Im = { class: "ai-input-attachment" }, Lm = { class: "ai-input-attachment-de
12490
12521
  z(V).name === e.name && qe(t.el);
12491
12522
  }
12492
12523
  }, (n = (r = t.getSideTabRenderComponent) == null ? void 0 : r.call(t, g, e, { removeCustomTab: z(de) })) == null ? [
12493
- g(q(e.name), { class: "ai-execution-summary-icon" }),
12524
+ g(Je(e.name), { class: "ai-execution-summary-icon" }),
12494
12525
  W(g("span", { class: "ai-execution-summary-label-text" }, (i = e.label) == null ? "" : i), [[z(go), X(X({}, ie.value), {}, { text: (a = e.label) == null ? "" : a })]]),
12495
12526
  e.closable !== !1 && e.name !== z("execution") ? g(z(Dr), {
12496
12527
  class: "ai-execution-close-icon",
@@ -12509,7 +12540,7 @@ var Im = { class: "ai-input-attachment" }, Lm = { class: "ai-input-attachment-de
12509
12540
  "message-groups": z(Oe),
12510
12541
  style: { height: "calc(100% - 40px)" },
12511
12542
  onLocateMessageGroup: Ke,
12512
- onUpdateKeyword: Ye
12543
+ onUpdateKeyword: Xe
12513
12544
  }, null, 8, ["message-groups"]))], 64)) : ((r = z(V)) == null ? void 0 : r.name) === z("file-artifact") ? (A(), o(og, {
12514
12545
  key: 1,
12515
12546
  "active-id": z(Re),
@@ -12554,7 +12585,7 @@ var Im = { class: "ai-input-attachment" }, Lm = { class: "ai-input-attachment-de
12554
12585
  messageToolsStatus: t.messageToolsStatus,
12555
12586
  isShareMode: z(Ae),
12556
12587
  commonTippyOptions: ie.value,
12557
- handleAgentAction: Xe,
12588
+ handleAgentAction: Qe,
12558
12589
  onAgentFeedback: t.onAgentFeedback,
12559
12590
  onInterruptResume: t.onInterruptResume,
12560
12591
  onUserAction: t.onUserAction,
@@ -12573,7 +12604,7 @@ var Im = { class: "ai-input-attachment" }, Lm = { class: "ai-input-attachment-de
12573
12604
  "message-tools-status": t.messageToolsStatus,
12574
12605
  "message-tools-tippy-options": ie.value,
12575
12606
  messages: t.messages,
12576
- "on-agent-action": Xe,
12607
+ "on-agent-action": Qe,
12577
12608
  "on-agent-feedback": t.onAgentFeedback,
12578
12609
  "on-interrupt-resume": t.onInterruptResume,
12579
12610
  "on-user-action": t.onUserAction,
@@ -12624,8 +12655,8 @@ var Im = { class: "ai-input-attachment" }, Lm = { class: "ai-input-attachment-de
12624
12655
  "is-all-selected": z(je),
12625
12656
  loading: !1,
12626
12657
  "selected-count": _e.value.length,
12627
- onCancel: Qe,
12628
- onConfirm: Ze,
12658
+ onCancel: et,
12659
+ onConfirm: $e,
12629
12660
  onToggleAll: z(Me)
12630
12661
  }, null, 8, [
12631
12662
  "is-all-selected",