@epam/ai-dial-chat-hooks 1.1.0-dev.435 → 1.1.0-dev.438

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.
@@ -1,48 +1,49 @@
1
1
  import { collectAttachmentRefs as e } from "./attachment-refs.js";
2
2
  import { resolveDialFileBucketAndPath as t } from "./dial-file-resolve.js";
3
- import { generateUUID as n } from "@epam/ai-dial-chat-shared";
3
+ import { generateUUID as n, sanitizeConversationName as r, stripTrailingDots as i, truncateToUtf8Bytes as a } from "@epam/ai-dial-chat-shared";
4
4
  //#region src/conversation/conversation-transfer/import-conversation.ts
5
- var r = class extends Error {
5
+ var o = class extends Error {
6
6
  constructor(e) {
7
7
  super(e), this.name = "UnsupportedImportFormatError";
8
8
  }
9
- }, i = (e) => typeof e == "object" && !!e, a = 5, o = (e) => {
9
+ }, s = (e) => typeof e == "object" && !!e, c = 5, l = (e) => {
10
10
  let t;
11
11
  try {
12
12
  t = JSON.parse(e);
13
13
  } catch {
14
- throw new r("Import file is not valid JSON");
14
+ throw new o("Import file is not valid JSON");
15
15
  }
16
- if (!i(t) || t.version !== a || !Array.isArray(t.history)) throw new r("Import file is not a supported export format");
16
+ if (!s(t) || t.version !== c || !Array.isArray(t.history)) throw new o("Import file is not a supported export format");
17
17
  let n = Array.isArray(t.folders) ? t.folders : [];
18
18
  return {
19
- version: a,
19
+ version: c,
20
20
  history: t.history,
21
21
  folders: n
22
22
  };
23
- }, s = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i, c = (e) => {
24
- let t = e.lastIndexOf("__");
25
- if (t < 0) return e;
26
- let n = e.slice(t + 2);
27
- return s.test(n) ? e.slice(0, t) : e;
28
- }, l = "conversations/", u = (e) => e.startsWith(l) ? e.slice(14) : e, d = (e, t) => {
29
- let r = u(e.id), i = r.split("/"), a = u(e.folderId), o = i[0], s = a.startsWith(`${o}/`) ? a.slice(o.length + 1).split("/").filter(Boolean) : [], l = i.slice(1).slice(s.length), d = l.slice(0, -1), f = `${c(l.at(-1) ?? i.at(-1) ?? r)}__${n()}`, p = [
30
- ...s,
31
- ...d,
32
- f
33
- ].join("/"), m = s.length ? `${t}/${s.join("/")}` : t;
23
+ }, u = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i, d = "__", f = 255, p = "applications", m = /[-+]/, h = /^\d+$/, g = (e) => e ? e.split(m)[0].split(".").every((e) => h.test(e)) : !1, _ = (e) => i(a(e.replace(/\r\n|\r/g, "\n").split("\n").map((e) => r(e).trim()).filter(Boolean)[0] ?? "", f)).trimEnd(), v = (e, t, r) => {
24
+ let i = e.split(d);
25
+ if (i.length < 2) return [e, n()].join(d);
26
+ let a = r && g(i[1]) ? i.slice(0, 2) : i.slice(0, 1), o = a.length > 1 ? u.test(i[i.length - 1]) : i.length >= 3, s = i.slice(a.length, o ? -1 : void 0).join(d);
27
+ return [
28
+ ...a,
29
+ t || s,
30
+ n()
31
+ ].join(d);
32
+ }, y = "conversations/", b = (e) => e.startsWith(y) ? e.slice(14) : e, x = (e, t) => {
33
+ let n = b(e.id), r = n.split("/"), i = b(e.folderId), a = r[0], o = i.startsWith(`${a}/`) ? i.slice(a.length + 1).split("/").filter(Boolean) : [], s = r.slice(1).slice(o.length), c = s.slice(0, -1), l = s.at(-1) ?? r.at(-1) ?? n, u = [...o, ...c], d = _(e.name), f = v(l, d, u[0] === p), m = [...u, f].join("/"), h = o.length ? `${t}/${o.join("/")}` : t;
34
34
  return {
35
35
  conversation: {
36
36
  ...e,
37
- id: `${t}/${p}`,
38
- folderId: m
37
+ ...d ? { name: d } : {},
38
+ id: `${t}/${m}`,
39
+ folderId: h
39
40
  },
40
- subPath: p
41
+ subPath: m
41
42
  };
42
- }, f = (e) => {
43
- let t = u(e.folderId).split("/").filter(Boolean).slice(1);
43
+ }, S = (e) => {
44
+ let t = b(e.folderId).split("/").filter(Boolean).slice(1);
44
45
  return t.length ? t.join(" / ") : void 0;
45
- }, p = (e) => e.map((e) => `"${e}"`).join(", "), m = (e, t) => ({
46
+ }, C = (e) => e.map((e) => `"${e}"`).join(", "), w = (e, t) => ({
46
47
  ...e,
47
48
  messages: e.messages.map((e) => {
48
49
  let n = e.custom_content?.attachments;
@@ -64,12 +65,12 @@ var r = class extends Error {
64
65
  }
65
66
  } : e;
66
67
  })
67
- }), h = (e) => e.split("/").pop() || e, g = (n, r, i) => {
68
+ }), T = (e) => e.split("/").pop() || e, E = (n, r, i) => {
68
69
  let a = [], o = [];
69
70
  for (let s of e(n)) {
70
71
  let e = t(s.fileId);
71
72
  if (!e) {
72
- o.push(h(s.fileId));
73
+ o.push(T(s.fileId));
73
74
  continue;
74
75
  }
75
76
  let n = e.path.split("/").pop() ?? e.path, c = r.get(e.path);
@@ -90,4 +91,4 @@ var r = class extends Error {
90
91
  };
91
92
  };
92
93
  //#endregion
93
- export { r as UnsupportedImportFormatError, p as formatQuotedNameList, f as getFolderBreadcrumb, o as parseImportEnvelope, g as planAttachmentUploads, d as rebaseConversationId, m as rewriteAttachmentUrls };
94
+ export { o as UnsupportedImportFormatError, C as formatQuotedNameList, S as getFolderBreadcrumb, l as parseImportEnvelope, E as planAttachmentUploads, x as rebaseConversationId, w as rewriteAttachmentUrls };
@@ -1,5 +1,9 @@
1
1
  //#region src/conversation/create-chat-stream-api.ts
2
- var e = { "Content-Type": "application/json" }, t = (e, t, n) => {
2
+ var e = { "Content-Type": "application/json" }, t = 409, n = "A response is already being generated in this conversation. Wait for it to finish or stop it before sending another message.", r = class extends Error {
3
+ constructor(e = n) {
4
+ super(e), this.name = "GenerationConflictError";
5
+ }
6
+ }, i = (e, t, n) => {
3
7
  let r = e.trim();
4
8
  if (!r || r.startsWith(":") || !r.startsWith("data: ")) return;
5
9
  let i = r.slice(6);
@@ -11,75 +15,79 @@ var e = { "Content-Type": "application/json" }, t = (e, t, n) => {
11
15
  }
12
16
  t(e);
13
17
  } catch {}
14
- }, n = (n) => {
15
- let { completionsBasePath: r } = n, i = (...e) => (n.fetchImpl ?? fetch)(...e);
18
+ }, a = (n) => {
19
+ let { completionsBasePath: a } = n, o = (...e) => (n.fetchImpl ?? fetch)(...e);
16
20
  return {
17
- streamCompletion: (a, o, s, c, l, u, d, f, p) => {
18
- let { onChunk: m, onComplete: h, onError: g, signal: _ } = c;
21
+ streamCompletion: (s, c, l, u, d, f, p, m, h) => {
22
+ let { onChunk: g, onComplete: _, onError: v, signal: y } = u;
19
23
  (async () => {
20
- let c;
24
+ let u;
21
25
  try {
22
26
  let t = n.getTimezone?.();
23
- c = await i(`${r}/completions`, {
27
+ u = await o(`${a}/completions`, {
24
28
  method: "POST",
25
29
  credentials: "include",
26
- signal: _,
30
+ signal: y,
27
31
  headers: {
28
32
  ...e,
29
33
  ...n.getCsrfToken() == null ? {} : { "X-CSRF-Token": n.getCsrfToken() },
30
34
  ...t ? { "X-Timezone": t } : {}
31
35
  },
32
36
  body: JSON.stringify({
33
- path: a,
34
- message: o ?? "",
35
- model: s,
36
- custom_content: l || {},
37
- ...u != null && { generationId: u },
38
- ...d != null && { mode: d },
39
- ...f != null && { messageIndex: f },
40
- ...p != null && { clientChannelId: p }
37
+ path: s,
38
+ message: c ?? "",
39
+ model: l,
40
+ custom_content: d || {},
41
+ ...f != null && { generationId: f },
42
+ ...p != null && { mode: p },
43
+ ...m != null && { messageIndex: m },
44
+ ...h != null && { clientChannelId: h }
41
45
  })
42
46
  });
43
47
  } catch (e) {
44
48
  if (e instanceof Error && e.name === "AbortError") return;
45
- g(e instanceof Error ? e : Error(String(e)));
49
+ v(e instanceof Error ? e : Error(String(e)));
46
50
  return;
47
51
  }
48
- let v = c.headers.get("x-csrf-token");
49
- if (v && n.setCsrfToken(v), !c.ok) {
50
- g(/* @__PURE__ */ Error(`Stream request failed with status ${c.status}`));
52
+ let b = u.headers.get("x-csrf-token");
53
+ if (b && n.setCsrfToken(b), !u.ok) {
54
+ if (u.status === t) {
55
+ v(new r());
56
+ return;
57
+ }
58
+ v(/* @__PURE__ */ Error(`Stream request failed with status ${u.status}`));
51
59
  return;
52
60
  }
53
- if (!c.body) {
54
- g(/* @__PURE__ */ Error("No response body"));
61
+ if (!u.body) {
62
+ v(/* @__PURE__ */ Error("No response body"));
55
63
  return;
56
64
  }
57
- let y = c.body.getReader(), b = new TextDecoder(), x = "", S = !1, C = (e) => {
58
- S = !0, g(e);
65
+ let x = u.body.getReader(), S = new TextDecoder(), C = "", w = !1, T = (e) => {
66
+ w = !0, v(e);
59
67
  };
60
68
  try {
61
69
  for (;;) {
62
- let { done: e, value: n } = await y.read();
70
+ let { done: e, value: t } = await x.read();
63
71
  if (e) {
64
- x.trim() && t(x, m, C);
72
+ C.trim() && i(C, g, T);
65
73
  break;
66
74
  }
67
- x += b.decode(n, { stream: !0 });
68
- let r = x.split("\n");
69
- x = r.pop() ?? "";
70
- for (let e of r) t(e, m, C);
75
+ C += S.decode(t, { stream: !0 });
76
+ let n = C.split("\n");
77
+ C = n.pop() ?? "";
78
+ for (let e of n) i(e, g, T);
71
79
  }
72
- S || h();
80
+ w || _();
73
81
  } catch (e) {
74
82
  if (e instanceof Error && e.name === "AbortError") return;
75
- g(e instanceof Error ? e : Error(String(e)));
83
+ v(e instanceof Error ? e : Error(String(e)));
76
84
  } finally {
77
- y.releaseLock();
85
+ x.releaseLock();
78
86
  }
79
87
  })();
80
88
  },
81
89
  stopCompletion: async (t) => {
82
- let a = await i(`${r}/completions/stop`, {
90
+ let r = await o(`${a}/completions/stop`, {
83
91
  method: "POST",
84
92
  credentials: "include",
85
93
  headers: {
@@ -87,10 +95,10 @@ var e = { "Content-Type": "application/json" }, t = (e, t, n) => {
87
95
  ...n.getCsrfToken() == null ? {} : { "X-CSRF-Token": n.getCsrfToken() }
88
96
  },
89
97
  body: JSON.stringify(t)
90
- }), o = a.headers.get("x-csrf-token");
91
- if (o && n.setCsrfToken(o), !a.ok) throw Error(`stopCompletion failed: ${a.status}`);
98
+ }), i = r.headers.get("x-csrf-token");
99
+ if (i && n.setCsrfToken(i), !r.ok) throw Error(`stopCompletion failed: ${r.status}`);
92
100
  }
93
101
  };
94
102
  };
95
103
  //#endregion
96
- export { n as createChatStreamApi };
104
+ export { n as DEFAULT_GENERATION_CONFLICT_MESSAGE, r as GenerationConflictError, a as createChatStreamApi };
@@ -154,7 +154,7 @@ var b = 5, x = 5, S = (e) => /\.(dial|zip)$/i.test(e.name), C = (e) => new Promi
154
154
  llmNamingDone: !0
155
155
  } }
156
156
  }, { signal: f }), f.aborted) return;
157
- k.push(e.name);
157
+ k.push(n.name);
158
158
  } catch (t) {
159
159
  if (f.aborted) return;
160
160
  if (F(t)) {
@@ -1,148 +1,152 @@
1
1
  import { safeDecodeURI as e } from "../../shared/string-utils.js";
2
- import { getConversationPath as t } from "./conversation-path.js";
3
- import { applyChunkToMessages as n } from "./apply-chunk.js";
4
- import { restoreBufferedMessage as r } from "./buffered-generation.js";
5
- import { createResumeIfAwaitingGeneration as i } from "./generation-resume.js";
6
- import { generateUUID as a } from "@epam/ai-dial-chat-shared";
7
- import { useCallback as o, useEffect as s, useMemo as c, useRef as l, useState as u } from "react";
8
- import { SendCompletionDtoModeEnum as d } from "@epam/ai-dial-chat-api-client";
2
+ import { DEFAULT_GENERATION_CONFLICT_MESSAGE as t, GenerationConflictError as n } from "../create-chat-stream-api.js";
3
+ import { getConversationPath as r } from "./conversation-path.js";
4
+ import { applyChunkToMessages as i } from "./apply-chunk.js";
5
+ import { restoreBufferedMessage as a } from "./buffered-generation.js";
6
+ import { createResumeIfAwaitingGeneration as o } from "./generation-resume.js";
7
+ import { generateUUID as s } from "@epam/ai-dial-chat-shared";
8
+ import { useCallback as c, useEffect as l, useMemo as u, useRef as d, useState as f } from "react";
9
+ import { SendCompletionDtoModeEnum as p } from "@epam/ai-dial-chat-api-client";
9
10
  //#region src/conversation/useConversationStream/useConversationStream.ts
10
- var f = 2e4, p = ({ conversationId: p, state: { setConversation: m, conversationRef: h }, transport: g, generation: { startGeneration: _, completeGeneration: v }, channel: y, overlay: b, onStopError: x }) => {
11
- let [S, C] = u(() => /* @__PURE__ */ new Set()), [w, T] = u(null), E = l(null), D = l(null), O = l(/* @__PURE__ */ new Set()), k = l(/* @__PURE__ */ new Map()), A = l(/* @__PURE__ */ new Set()), j = l(/* @__PURE__ */ new Map()), M = l(p);
12
- s(() => {
13
- M.current = p;
14
- }, [p]);
15
- let N = o((e) => t(M.current ?? "") === e, []), P = o((e) => {
16
- C((t) => {
11
+ var m = 2e4, h = ({ conversationId: h, state: { setConversation: g, conversationRef: _ }, transport: v, generation: { startGeneration: y, completeGeneration: b }, channel: x, overlay: S, onStopError: C, generationConflictMessage: w = t }) => {
12
+ let [T, E] = f(() => /* @__PURE__ */ new Set()), [D, O] = f(null), k = d(null), A = d(null), j = d(/* @__PURE__ */ new Set()), M = d(/* @__PURE__ */ new Map()), N = d(/* @__PURE__ */ new Set()), P = d(/* @__PURE__ */ new Map()), F = d(h);
13
+ l(() => {
14
+ F.current = h;
15
+ }, [h]);
16
+ let I = c((e) => r(F.current ?? "") === e, []), L = c((e) => {
17
+ E((t) => {
17
18
  if (t.has(e)) return t;
18
19
  let n = new Set(t);
19
20
  return n.add(e), n;
20
21
  });
21
- }, []), F = o((e) => {
22
- C((t) => {
22
+ }, []), R = c((e) => {
23
+ E((t) => {
23
24
  if (!t.has(e)) return t;
24
25
  let n = new Set(t);
25
26
  return n.delete(e), n;
26
27
  });
27
- }, []), I = o((i, o, s, c, l, u, p = d.Append) => {
28
- let x = u ?? a(), S = t(i);
29
- E.current = x, D.current = S, j.current.set(S, x), T(S);
30
- let C;
31
- p === d.Regenerate ? C = s : p === d.Edit && (C = s - 1);
32
- let w = () => j.current.get(S) !== x, O = _(S, x), M = h.current?.messages[s];
33
- M ? k.current.set(S, {
34
- generationId: x,
35
- messageIndex: s,
36
- message: M
37
- }) : k.current.delete(S), P(S), b?.notifyGenerationStart?.(), y?.ensureConnected();
38
- let I = {
39
- signal: O.signal,
28
+ }, []), z = c((t, o, c, l, u, d, f = p.Append) => {
29
+ let h = d ?? s(), C = r(t);
30
+ k.current = h, A.current = C, P.current.set(C, h), O(C);
31
+ let T;
32
+ f === p.Regenerate ? T = c : f === p.Edit && (T = c - 1);
33
+ let E = () => P.current.get(C) !== h, D = y(C, h), j = _.current?.messages[c];
34
+ j ? M.current.set(C, {
35
+ generationId: h,
36
+ messageIndex: c,
37
+ message: j
38
+ }) : M.current.delete(C), L(C), S?.notifyGenerationStart?.(), x?.ensureConnected();
39
+ let F = {
40
+ signal: D.signal,
40
41
  onChunk: (e) => {
41
- if (E.current !== x) return;
42
- let t = k.current.get(S);
43
- if (t?.generationId === x) {
44
- let r = n([t.message], 0, e);
45
- r && (t.message = r[0]);
42
+ if (k.current !== h) return;
43
+ let t = M.current.get(C);
44
+ if (t?.generationId === h) {
45
+ let n = i([t.message], 0, e);
46
+ n && (t.message = n[0]);
46
47
  }
47
- N(S) && m((t) => {
48
+ I(C) && g((t) => {
48
49
  if (!t) return t;
49
- let i = k.current.get(S), a;
50
- if (i?.generationId === x) a = r(t, i);
50
+ let n = M.current.get(C), r;
51
+ if (n?.generationId === h) r = a(t, n);
51
52
  else {
52
- let r = n(t.messages, s, e);
53
- if (!r) return t;
54
- a = {
53
+ let n = i(t.messages, c, e);
54
+ if (!n) return t;
55
+ r = {
55
56
  ...t,
56
- messages: r
57
+ messages: n
57
58
  };
58
59
  }
59
- return h.current = a, a;
60
+ return _.current = r, r;
60
61
  });
61
62
  },
62
63
  onComplete: async () => {
63
- if (k.current.get(S)?.generationId === x && k.current.delete(S), w() || F(S), E.current === x && (E.current = null, D.current = null, T(null)), v(S, x), y?.notifyGenerationSettled?.(), A.current.has(x) ? A.current.delete(x) : w() || b?.notifyGenerationEnd?.(), !w() && N(S)) try {
64
- let t = await g.getConversation(e(i));
65
- if (w() || !N(S)) return;
66
- m(t), h.current = t;
64
+ if (M.current.get(C)?.generationId === h && M.current.delete(C), E() || R(C), k.current === h && (k.current = null, A.current = null, O(null)), b(C, h), x?.notifyGenerationSettled?.(), N.current.has(h) ? N.current.delete(h) : E() || S?.notifyGenerationEnd?.(), !E() && I(C)) try {
65
+ let n = await v.getConversation(e(t));
66
+ if (E() || !I(C)) return;
67
+ g(n), _.current = n;
67
68
  } catch {}
68
69
  },
69
70
  onError: (e) => {
70
- let t = k.current.get(S), n = t?.generationId === x ? t : void 0;
71
- n && k.current.delete(S), w() || F(S), E.current === x && (E.current = null, D.current = null, T(null)), v(S, x), y?.notifyGenerationSettled?.(), !(w() || !N(S)) && m((t) => {
72
- if (!t) return t;
73
- let i = n?.generationId === x ? r(t, n) : t, a = {
74
- ...i,
75
- messages: i.messages.map((t, n) => n === s ? {
76
- ...t,
77
- streamErrorMessage: e.message
78
- } : t)
71
+ let t = M.current.get(C), r = t?.generationId === h ? t : void 0;
72
+ if (r && M.current.delete(C), E() || R(C), k.current === h && (k.current = null, A.current = null, O(null)), b(C, h), x?.notifyGenerationSettled?.(), E() || !I(C)) return;
73
+ let i = e instanceof n ? w : e.message;
74
+ g((e) => {
75
+ if (!e) return e;
76
+ let t = r?.generationId === h ? a(e, r) : e, n = {
77
+ ...t,
78
+ messages: t.messages.map((e, t) => t === c ? {
79
+ ...e,
80
+ streamErrorMessage: i
81
+ } : e)
79
82
  };
80
- return h.current = a, a;
83
+ return _.current = n, n;
81
84
  });
82
85
  }
83
86
  };
84
87
  (async () => {
85
88
  try {
86
- let e = y?.channelId ?? await y?.waitForChannel(f) ?? void 0;
87
- g.streamCompletion(S, o, c, I, l, x, p, C, e);
89
+ let e = x?.channelId ?? await x?.waitForChannel(m) ?? void 0;
90
+ v.streamCompletion(C, o, l, F, u, h, f, T, e);
88
91
  } catch (e) {
89
- I.onError(e instanceof Error ? e : Error(String(e)));
92
+ F.onError(e instanceof Error ? e : Error(String(e)));
90
93
  }
91
94
  })();
92
95
  }, [
93
- _,
94
- v,
95
- P,
96
- F,
97
- N,
98
- y?.channelId,
99
- y?.ensureConnected,
100
- y?.waitForChannel,
101
- y?.notifyGenerationSettled,
96
+ y,
102
97
  b,
103
- g
104
- ]), L = o((e, n) => {
105
- let i = t(e), a = k.current.get(i);
106
- return a ? r(n, a) : n;
107
- }, []), R = o(() => {
108
- let e = E.current;
109
- if (!e || !p) return;
110
- let n = t(p);
111
- D.current === n && (A.current.add(e), b?.notifyStopGenerating?.(), g.stopCompletion({
98
+ L,
99
+ R,
100
+ I,
101
+ x?.channelId,
102
+ x?.ensureConnected,
103
+ x?.waitForChannel,
104
+ x?.notifyGenerationSettled,
105
+ S,
106
+ v,
107
+ w
108
+ ]), B = c((e, t) => {
109
+ let n = r(e), i = M.current.get(n);
110
+ return i ? a(t, i) : t;
111
+ }, []), V = c(() => {
112
+ let e = k.current;
113
+ if (!e || !h) return;
114
+ let t = r(h);
115
+ A.current === t && (N.current.add(e), S?.notifyStopGenerating?.(), v.stopCompletion({
112
116
  generationId: e,
113
- path: n
117
+ path: t
114
118
  }).catch((e) => {
115
119
  let t = e instanceof Error ? e : Error(String(e));
116
- x?.(t);
120
+ C?.(t);
117
121
  }));
118
122
  }, [
119
- p,
120
- x,
121
- b,
122
- g
123
- ]), z = c(() => i({
124
- transport: g,
125
- setConversation: m,
126
- conversationRef: h,
127
- resumingPathsRef: O,
128
- bufferedGenerationsRef: k,
129
- addStreamingPath: P,
130
- removeStreamingPath: F,
131
- isPathDisplayed: N
123
+ h,
124
+ C,
125
+ S,
126
+ v
127
+ ]), H = u(() => o({
128
+ transport: v,
129
+ setConversation: g,
130
+ conversationRef: _,
131
+ resumingPathsRef: j,
132
+ bufferedGenerationsRef: M,
133
+ addStreamingPath: L,
134
+ removeStreamingPath: R,
135
+ isPathDisplayed: I
132
136
  }), [
133
- P,
134
- F,
135
- N,
136
- g
137
- ]), B = p != null && S.has(t(p)), V = p == null ? null : t(p);
137
+ L,
138
+ R,
139
+ I,
140
+ v
141
+ ]), U = h != null && T.has(r(h)), W = h == null ? null : r(h);
138
142
  return {
139
- startStream: I,
140
- handleStop: R,
141
- resumeIfAwaitingGeneration: z,
142
- restoreBufferedGeneration: L,
143
- isStreaming: B,
144
- canStopStreaming: V != null && w === V
143
+ startStream: z,
144
+ handleStop: V,
145
+ resumeIfAwaitingGeneration: H,
146
+ restoreBufferedGeneration: B,
147
+ isStreaming: U,
148
+ canStopStreaming: W != null && D === W
145
149
  };
146
150
  };
147
151
  //#endregion
148
- export { p as useConversationStream };
152
+ export { h as useConversationStream };
package/conversation.d.ts CHANGED
@@ -308,6 +308,9 @@ export declare const createDeploymentChangedMessage: (previousDeploymentId: stri
308
308
  /** Builds a user message and its empty assistant placeholder, both timestamped `now`. */
309
309
  export declare const createMessagePair: (content: string, customContent?: MessageCustomContent, deploymentId?: string | null) => MessagePair;
310
310
 
311
+ /** Fallback text of a {@link GenerationConflictError} when no message is supplied. */
312
+ export declare const DEFAULT_GENERATION_CONFLICT_MESSAGE = "A response is already being generated in this conversation. Wait for it to finish or stop it before sending another message.";
313
+
311
314
  /**
312
315
  * Derives the row-action visibility state for a single conversation item.
313
316
  *
@@ -331,6 +334,17 @@ export declare const deriveConversationRowActionState: (item: Pick<ConversationL
331
334
  */
332
335
  export declare const formatAppVersion: (version: string) => string;
333
336
 
337
+ /**
338
+ * Reported through `onError` when the backend rejects a completion because
339
+ * another generation is already active on the same conversation — what a
340
+ * second browser tab of the same session hits when it submits into a
341
+ * conversation the first tab is still generating. Distinct from a generic
342
+ * transport failure so callers can present it as an expected state.
343
+ */
344
+ export declare class GenerationConflictError extends Error {
345
+ constructor(message?: string);
346
+ }
347
+
334
348
  /**
335
349
  * Strips the leading bucket segment from a conversation id and decodes any
336
350
  * already-percent-encoded remainder back to raw, so callers that re-encode
@@ -864,7 +878,7 @@ export declare interface UseConversationPanelItemsResolvers {
864
878
  * `transport`/`generation`/`channel`/`overlay` capabilities rather than any
865
879
  * app context or `server-api` import.
866
880
  */
867
- export declare const useConversationStream: ({ conversationId, state: { setConversation, conversationRef }, transport, generation: { startGeneration, completeGeneration }, channel, overlay, onStopError, }: UseConversationStreamParams) => UseConversationStreamResult;
881
+ export declare const useConversationStream: ({ conversationId, state: { setConversation, conversationRef }, transport, generation: { startGeneration, completeGeneration }, channel, overlay, onStopError, generationConflictMessage, }: UseConversationStreamParams) => UseConversationStreamResult;
868
882
 
869
883
  /** Parameters for {@link useConversationStream}. */
870
884
  export declare interface UseConversationStreamParams {
@@ -875,6 +889,13 @@ export declare interface UseConversationStreamParams {
875
889
  channel?: ConversationStreamChannel;
876
890
  overlay?: ConversationStreamOverlayNotifier;
877
891
  onStopError?: (error: Error) => void;
892
+ /**
893
+ * Message shown on the message bubble when the backend rejects a completion
894
+ * because this conversation is already generating — the case a second
895
+ * browser tab of the same session hits. Defaults to
896
+ * {@link DEFAULT_GENERATION_CONFLICT_MESSAGE}.
897
+ */
898
+ generationConflictMessage?: string;
878
899
  }
879
900
 
880
901
  /** Return value of {@link useConversationStream}. */
package/conversation.js CHANGED
@@ -1,31 +1,31 @@
1
1
  import { buildAnnouncementSignature as e, hasAnnouncementContent as t, hasStructuredAnnouncement as n, sanitizeAnnouncementHtml as r, sanitizeAnnouncementMessageHtml as i } from "./conversation/announcement-message.js";
2
- import { createChatStreamApi as a } from "./conversation/create-chat-stream-api.js";
3
- import { shouldWatchForDisplayNameUpdate as o } from "./conversation/display-name-watch.js";
4
- import { formatAppVersion as s, sanitizeFooterHtml as c } from "./conversation/footer-message.js";
5
- import { getModelIdFromConversationId as l } from "./conversation/get-model-id-from-conversation-id.js";
6
- import { getTimeOfDayGreeting as u } from "./conversation/greeting.js";
7
- import { createDeploymentChangedMessage as d } from "./conversation/message-factory.js";
8
- import { getLastDeploymentId as f, getLastUserMessageToolConfiguration as p, isMessageStreaming as m, messageHasStages as h, normalizeResponseFormat as g } from "./conversation/message-utils.js";
9
- import { toOverlayMessages as _ } from "./conversation/overlay-messages.js";
10
- import { getQuickAppConversationStarters as v } from "./conversation/quick-app-conversation-starters.js";
11
- import { getStarterPopulateText as y, getStartersFromSchema as b } from "./conversation/starter-option.js";
12
- import { deriveConversationRowActionState as x } from "./conversation/deriveConversationRowActionState/deriveConversationRowActionState.js";
13
- import { useActiveConversationSync as S } from "./conversation/useActiveConversationSync/useActiveConversationSync.js";
14
- import { useAsyncConfirmDialog as C } from "./conversation/useAsyncConfirmDialog/useAsyncConfirmDialog.js";
15
- import { useConversationLookupMaps as w } from "./conversation/useConversationLookupMaps/useConversationLookupMaps.js";
16
- import { getConversationSource as T, useConversationPanelItems as E } from "./conversation/useConversationPanelItems/useConversationPanelItems.js";
17
- import { useImportFilePicker as D } from "./conversation/useImportFilePicker/useImportFilePicker.js";
18
- import { useAttachmentUpload as O } from "./conversation/useAttachmentUpload/useAttachmentUpload.js";
19
- import { AudioTranscriptionError as k, AudioTranscriptionErrorReason as A } from "./conversation/useTranscribeAudio/audio-transcription-error.js";
20
- import { useTranscribeAudio as j } from "./conversation/useTranscribeAudio/useTranscribeAudio.js";
21
- import { attachmentToDto as M, attachmentsToDtos as N } from "./conversation/useConversationHandlers/attachment-to-dto.js";
22
- import { createMessagePair as P } from "./conversation/useConversationHandlers/message-factory.js";
23
- import { hasActiveToolConfig as F, isAnswerIncomplete as I, isMessageChanged as L, shouldRerunGenerationOnEdit as R } from "./conversation/useConversationHandlers/message-utils.js";
24
- import { getStarterConversationText as z, getStarterSubmitText as B } from "./conversation/useConversationHandlers/starter-option.js";
25
- import { getConversationPath as V } from "./conversation/useConversationStream/conversation-path.js";
26
- import { useConversationHandlers as H } from "./conversation/useConversationHandlers/useConversationHandlers.js";
27
- import { isAwaitingGenerationResume as U } from "./conversation/useConversationStream/generation-resume.js";
28
- import { useConversationStream as W } from "./conversation/useConversationStream/useConversationStream.js";
29
- import { useChatSettingsFormConfig as G } from "./useChatSettingsFormConfig/useChatSettingsFormConfig.js";
30
- import { useToolsMenu as K } from "./useToolsMenu/useToolsMenu.js";
31
- export { k as AudioTranscriptionError, A as AudioTranscriptionErrorReason, M as attachmentToDto, N as attachmentsToDtos, e as buildAnnouncementSignature, a as createChatStreamApi, d as createDeploymentChangedMessage, P as createMessagePair, x as deriveConversationRowActionState, s as formatAppVersion, V as getConversationPath, T as getConversationSource, f as getLastDeploymentId, p as getLastUserMessageToolConfiguration, l as getModelIdFromConversationId, v as getQuickAppConversationStarters, z as getStarterConversationText, y as getStarterPopulateText, B as getStarterSubmitText, b as getStartersFromSchema, u as getTimeOfDayGreeting, F as hasActiveToolConfig, t as hasAnnouncementContent, n as hasStructuredAnnouncement, I as isAnswerIncomplete, U as isAwaitingGenerationResume, L as isMessageChanged, m as isMessageStreaming, h as messageHasStages, g as normalizeResponseFormat, r as sanitizeAnnouncementHtml, i as sanitizeAnnouncementMessageHtml, c as sanitizeFooterHtml, R as shouldRerunGenerationOnEdit, o as shouldWatchForDisplayNameUpdate, _ as toOverlayMessages, S as useActiveConversationSync, C as useAsyncConfirmDialog, O as useAttachmentUpload, G as useChatSettingsFormConfig, H as useConversationHandlers, w as useConversationLookupMaps, E as useConversationPanelItems, W as useConversationStream, D as useImportFilePicker, K as useToolsMenu, j as useTranscribeAudio };
2
+ import { DEFAULT_GENERATION_CONFLICT_MESSAGE as a, GenerationConflictError as o, createChatStreamApi as s } from "./conversation/create-chat-stream-api.js";
3
+ import { shouldWatchForDisplayNameUpdate as c } from "./conversation/display-name-watch.js";
4
+ import { formatAppVersion as l, sanitizeFooterHtml as u } from "./conversation/footer-message.js";
5
+ import { getModelIdFromConversationId as d } from "./conversation/get-model-id-from-conversation-id.js";
6
+ import { getTimeOfDayGreeting as f } from "./conversation/greeting.js";
7
+ import { createDeploymentChangedMessage as p } from "./conversation/message-factory.js";
8
+ import { getLastDeploymentId as m, getLastUserMessageToolConfiguration as h, isMessageStreaming as g, messageHasStages as _, normalizeResponseFormat as v } from "./conversation/message-utils.js";
9
+ import { toOverlayMessages as y } from "./conversation/overlay-messages.js";
10
+ import { getQuickAppConversationStarters as b } from "./conversation/quick-app-conversation-starters.js";
11
+ import { getStarterPopulateText as x, getStartersFromSchema as S } from "./conversation/starter-option.js";
12
+ import { deriveConversationRowActionState as C } from "./conversation/deriveConversationRowActionState/deriveConversationRowActionState.js";
13
+ import { useActiveConversationSync as w } from "./conversation/useActiveConversationSync/useActiveConversationSync.js";
14
+ import { useAsyncConfirmDialog as T } from "./conversation/useAsyncConfirmDialog/useAsyncConfirmDialog.js";
15
+ import { useConversationLookupMaps as E } from "./conversation/useConversationLookupMaps/useConversationLookupMaps.js";
16
+ import { getConversationSource as D, useConversationPanelItems as O } from "./conversation/useConversationPanelItems/useConversationPanelItems.js";
17
+ import { useImportFilePicker as k } from "./conversation/useImportFilePicker/useImportFilePicker.js";
18
+ import { useAttachmentUpload as A } from "./conversation/useAttachmentUpload/useAttachmentUpload.js";
19
+ import { AudioTranscriptionError as j, AudioTranscriptionErrorReason as M } from "./conversation/useTranscribeAudio/audio-transcription-error.js";
20
+ import { useTranscribeAudio as N } from "./conversation/useTranscribeAudio/useTranscribeAudio.js";
21
+ import { attachmentToDto as P, attachmentsToDtos as F } from "./conversation/useConversationHandlers/attachment-to-dto.js";
22
+ import { createMessagePair as I } from "./conversation/useConversationHandlers/message-factory.js";
23
+ import { hasActiveToolConfig as L, isAnswerIncomplete as R, isMessageChanged as z, shouldRerunGenerationOnEdit as B } from "./conversation/useConversationHandlers/message-utils.js";
24
+ import { getStarterConversationText as V, getStarterSubmitText as H } from "./conversation/useConversationHandlers/starter-option.js";
25
+ import { getConversationPath as U } from "./conversation/useConversationStream/conversation-path.js";
26
+ import { useConversationHandlers as W } from "./conversation/useConversationHandlers/useConversationHandlers.js";
27
+ import { isAwaitingGenerationResume as G } from "./conversation/useConversationStream/generation-resume.js";
28
+ import { useConversationStream as K } from "./conversation/useConversationStream/useConversationStream.js";
29
+ import { useChatSettingsFormConfig as q } from "./useChatSettingsFormConfig/useChatSettingsFormConfig.js";
30
+ import { useToolsMenu as J } from "./useToolsMenu/useToolsMenu.js";
31
+ export { j as AudioTranscriptionError, M as AudioTranscriptionErrorReason, a as DEFAULT_GENERATION_CONFLICT_MESSAGE, o as GenerationConflictError, P as attachmentToDto, F as attachmentsToDtos, e as buildAnnouncementSignature, s as createChatStreamApi, p as createDeploymentChangedMessage, I as createMessagePair, C as deriveConversationRowActionState, l as formatAppVersion, U as getConversationPath, D as getConversationSource, m as getLastDeploymentId, h as getLastUserMessageToolConfiguration, d as getModelIdFromConversationId, b as getQuickAppConversationStarters, V as getStarterConversationText, x as getStarterPopulateText, H as getStarterSubmitText, S as getStartersFromSchema, f as getTimeOfDayGreeting, L as hasActiveToolConfig, t as hasAnnouncementContent, n as hasStructuredAnnouncement, R as isAnswerIncomplete, G as isAwaitingGenerationResume, z as isMessageChanged, g as isMessageStreaming, _ as messageHasStages, v as normalizeResponseFormat, r as sanitizeAnnouncementHtml, i as sanitizeAnnouncementMessageHtml, u as sanitizeFooterHtml, B as shouldRerunGenerationOnEdit, c as shouldWatchForDisplayNameUpdate, y as toOverlayMessages, w as useActiveConversationSync, T as useAsyncConfirmDialog, A as useAttachmentUpload, q as useChatSettingsFormConfig, W as useConversationHandlers, E as useConversationLookupMaps, O as useConversationPanelItems, K as useConversationStream, k as useImportFilePicker, J as useToolsMenu, N as useTranscribeAudio };
package/index.d.ts CHANGED
@@ -1005,6 +1005,9 @@ export declare const decodeToolsetId: (id: string) => string;
1005
1005
  */
1006
1006
  export declare const decomposeLocalizedFields: (displayName: LocalizedText | undefined, description: LocalizedText | undefined, primaryLocale: string) => DeploymentCreationFormLocaleEntry[];
1007
1007
 
1008
+ /** Fallback text of a {@link GenerationConflictError} when no message is supplied. */
1009
+ export declare const DEFAULT_GENERATION_CONFLICT_MESSAGE = "A response is already being generated in this conversation. Wait for it to finish or stop it before sending another message.";
1010
+
1008
1011
  /**
1009
1012
  * Default ceiling on the summed byte length of an export's attachments.
1010
1013
  *
@@ -1608,6 +1611,17 @@ export declare const formatOperationFolderName: (destinationFolder: string, root
1608
1611
  */
1609
1612
  export declare const formatQuotedNameList: (names: string[]) => string;
1610
1613
 
1614
+ /**
1615
+ * Reported through `onError` when the backend rejects a completion because
1616
+ * another generation is already active on the same conversation — what a
1617
+ * second browser tab of the same session hits when it submits into a
1618
+ * conversation the first tab is still generating. Distinct from a generic
1619
+ * transport failure so callers can present it as an expected state.
1620
+ */
1621
+ export declare class GenerationConflictError extends Error {
1622
+ constructor(message?: string);
1623
+ }
1624
+
1611
1625
  /** Normalizes any API error into a `{ status?, message, traceId? }` shape. */
1612
1626
  export declare const getApiErrorDetails: (error: unknown) => Promise<ApiErrorDetails>;
1613
1627
 
@@ -4360,7 +4374,7 @@ export declare interface UseConversationSourcesResult {
4360
4374
  * `transport`/`generation`/`channel`/`overlay` capabilities rather than any
4361
4375
  * app context or `server-api` import.
4362
4376
  */
4363
- export declare const useConversationStream: ({ conversationId, state: { setConversation, conversationRef }, transport, generation: { startGeneration, completeGeneration }, channel, overlay, onStopError, }: UseConversationStreamParams) => UseConversationStreamResult;
4377
+ export declare const useConversationStream: ({ conversationId, state: { setConversation, conversationRef }, transport, generation: { startGeneration, completeGeneration }, channel, overlay, onStopError, generationConflictMessage, }: UseConversationStreamParams) => UseConversationStreamResult;
4364
4378
 
4365
4379
  /** Parameters for {@link useConversationStream}. */
4366
4380
  export declare interface UseConversationStreamParams {
@@ -4371,6 +4385,13 @@ export declare interface UseConversationStreamParams {
4371
4385
  channel?: ConversationStreamChannel;
4372
4386
  overlay?: ConversationStreamOverlayNotifier;
4373
4387
  onStopError?: (error: Error) => void;
4388
+ /**
4389
+ * Message shown on the message bubble when the backend rejects a completion
4390
+ * because this conversation is already generating — the case a second
4391
+ * browser tab of the same session hits. Defaults to
4392
+ * {@link DEFAULT_GENERATION_CONFLICT_MESSAGE}.
4393
+ */
4394
+ generationConflictMessage?: string;
4374
4395
  }
4375
4396
 
4376
4397
  /** Return value of {@link useConversationStream}. */
package/index.js CHANGED
@@ -45,92 +45,92 @@ import { useSkillDetailsPanelData as Dt } from "./catalog/useSkillDetailsPanelDa
45
45
  import { FavoriteEntityType as Ot, useFavoriteEntitiesState as kt } from "./catalog/useFavoriteEntitiesState/useFavoriteEntitiesState.js";
46
46
  import { usePublishFolders as At } from "./catalog/usePublishFolders/usePublishFolders.js";
47
47
  import { buildAnnouncementSignature as jt, hasAnnouncementContent as Mt, hasStructuredAnnouncement as Nt, sanitizeAnnouncementHtml as Pt, sanitizeAnnouncementMessageHtml as Ft } from "./conversation/announcement-message.js";
48
- import { createChatStreamApi as It } from "./conversation/create-chat-stream-api.js";
49
- import { shouldWatchForDisplayNameUpdate as Lt } from "./conversation/display-name-watch.js";
50
- import { formatAppVersion as Rt, sanitizeFooterHtml as zt } from "./conversation/footer-message.js";
51
- import { getModelIdFromConversationId as Bt } from "./conversation/get-model-id-from-conversation-id.js";
52
- import { getTimeOfDayGreeting as Vt } from "./conversation/greeting.js";
53
- import { createDeploymentChangedMessage as Ht } from "./conversation/message-factory.js";
54
- import { getLastDeploymentId as Ut, getLastUserMessageToolConfiguration as Wt, isMessageStreaming as Gt, messageHasStages as Kt, normalizeResponseFormat as qt } from "./conversation/message-utils.js";
55
- import { toOverlayMessages as Jt } from "./conversation/overlay-messages.js";
56
- import { getQuickAppConversationStarters as Yt } from "./conversation/quick-app-conversation-starters.js";
57
- import { getStarterPopulateText as Xt, getStartersFromSchema as Zt } from "./conversation/starter-option.js";
58
- import { useOAuthCallbackCompletion as Qt } from "./oauth/useOAuthCallbackCompletion/useOAuthCallbackCompletion.js";
59
- import { buildPromptExportEnvelope as $t, buildPromptExportFileName as en, serializePromptExport as tn } from "./prompt/export-prompt.js";
60
- import { PROMPT_CONTENT_MAX_LENGTH as nn, PROMPT_COUNTER_ANNOUNCE_THRESHOLD as rn, PROMPT_DESCRIPTION_MAX_LENGTH as an, PROMPT_NAME_MAX_LENGTH as on, PromptFieldError as sn, buildPromptPath as cn, getRemainingCharacters as ln, validatePromptContent as un, validatePromptDescription as dn, validatePromptName as fn } from "./prompt/prompt.js";
61
- import { usePromptsState as pn } from "./prompt/usePromptsState/usePromptsState.js";
62
- import { UnsupportedTriggerReason as mn } from "./scheduled-task/scheduled-task-mapping.js";
63
- import { apSchedulerDayToJsDay as hn, jsDayToApSchedulerDay as gn } from "./shared/cron-weekday.js";
64
- import { mapFormValuesToCreateBody as _n, mapFormValuesToUpdateBody as vn, mapScheduledTaskDtoToFormValues as yn } from "./scheduled-task/scheduled-task-trigger.js";
65
- import { validateSkillFileBatch as bn } from "./skill/skill-file-batch-validation.js";
66
- import { skillFileToAttachment as xn } from "./skill/skill-file-preview.js";
67
- import { SkillEditorLoadState as Sn, useSkillEditorLoad as Cn } from "./skill/useSkillEditorLoad.js";
68
- import { useSkillEditorSubmit as wn } from "./skill/useSkillEditorSubmit.js";
69
- import { useSkillFileActions as Tn } from "./skill/useSkillFileActions.js";
70
- import { SkillPreviewErrorKind as En, useSkillFilePreview as Dn } from "./skill/useSkillFilePreview.js";
71
- import { useSkillsState as On } from "./skill/useSkillsState/useSkillsState.js";
72
- import { RecipientsCountStatus as kn, useShareRecipientsCount as An } from "./useShareRecipientsCount/useShareRecipientsCount.js";
73
- import { deriveConversationRowActionState as jn } from "./conversation/deriveConversationRowActionState/deriveConversationRowActionState.js";
74
- import { useActiveConversationSync as Mn } from "./conversation/useActiveConversationSync/useActiveConversationSync.js";
75
- import { useAsyncConfirmDialog as Nn } from "./conversation/useAsyncConfirmDialog/useAsyncConfirmDialog.js";
76
- import { useConversationLookupMaps as Pn } from "./conversation/useConversationLookupMaps/useConversationLookupMaps.js";
77
- import { getConversationSource as Fn, useConversationPanelItems as In } from "./conversation/useConversationPanelItems/useConversationPanelItems.js";
78
- import { useImportFilePicker as Ln } from "./conversation/useImportFilePicker/useImportFilePicker.js";
79
- import { useAttachmentUpload as Rn } from "./conversation/useAttachmentUpload/useAttachmentUpload.js";
80
- import { AudioTranscriptionError as zn, AudioTranscriptionErrorReason as Bn } from "./conversation/useTranscribeAudio/audio-transcription-error.js";
81
- import { useTranscribeAudio as Vn } from "./conversation/useTranscribeAudio/useTranscribeAudio.js";
82
- import { DEFAULT_MAX_ARCHIVE_BYTES as Hn, useConversationExport as Un } from "./conversation/useConversationExport/useConversationExport.js";
83
- import { attachmentToDto as Wn, attachmentsToDtos as Gn } from "./conversation/useConversationHandlers/attachment-to-dto.js";
84
- import { createMessagePair as Kn } from "./conversation/useConversationHandlers/message-factory.js";
85
- import { hasActiveToolConfig as qn, isAnswerIncomplete as Jn, isMessageChanged as Yn, shouldRerunGenerationOnEdit as Xn } from "./conversation/useConversationHandlers/message-utils.js";
86
- import { getStarterConversationText as Zn, getStarterSubmitText as Qn } from "./conversation/useConversationHandlers/starter-option.js";
87
- import { getConversationPath as $n } from "./conversation/useConversationStream/conversation-path.js";
88
- import { useConversationHandlers as er } from "./conversation/useConversationHandlers/useConversationHandlers.js";
89
- import { useConversationImport as tr } from "./conversation/useConversationImport/useConversationImport.js";
90
- import { useConversationScroll as nr } from "./conversation/useConversationScroll/useConversationScroll.js";
91
- import { isAwaitingGenerationResume as rr } from "./conversation/useConversationStream/generation-resume.js";
92
- import { useConversationStream as ir } from "./conversation/useConversationStream/useConversationStream.js";
93
- import { useConversationSources as ar } from "./conversation-sources/useConversationSources/useConversationSources.js";
94
- import { DialFilesApiUploadMode as or } from "./files/dial-files-api.js";
95
- import { FileManagerNotificationReason as sr, FileNameValidationErrorReason as cr, FileOperationKind as lr } from "./files/dial-file-manager.types.js";
96
- import { COLUMNS_WITHOUT_AUTHOR as ur, COLUMNS_WITH_AUTHOR as dr, CORE_PERMISSION_MAP as fr, DATE_OPTIONS as pr, PATH_SEPARATOR_REGEXP as mr, RESERVED_MARKER_NAME as hr, UPLOAD_CONCURRENCY as gr } from "./files/dial-file-manager.model.js";
97
- import { DialFileManagerActionProfile as _r, DialFileManagerVariant as vr, deriveActionProfile as yr } from "./files/file-manager-variant.js";
98
- import { buildSharedItemVirtualPath as br, dialCorePathToRelative as xr, findDialFileByPath as Sr, findFolderByVirtualPath as Cr, formatOperationFolderName as wr, getVirtualPathName as Tr, hasDialFileWritePermission as Er, hasForbiddenNameSymbols as Dr, isCopyMoveDuplicateAllowed as Or, isShareActionsAllowed as kr, normalizeVirtualPath as Ar, parseNewFolderVirtualPath as jr, resolveOwnerCoords as Mr } from "./files/dial-file-manager-path.util.js";
99
- import { getParentFolderPath as Nr, resolveDialFileApiPath as Pr, virtualPathToApiPath as Fr } from "./files/resolve-dial-file-api-path.js";
100
- import { prepareCopyItems as Ir, prepareMoveRenameItems as Lr } from "./files/dial-file-manager-copy-move.util.js";
101
- import { buildFromCache as Rr, fetchByTab as zr, fetchForSearch as Br, findFirstSuccessfulCopyMoveItem as Vr, mapCorePermissions as Hr, mapFileMetadataToDialFile as Ur, mapSearchItem as Wr, mergeCreatedFolderIntoCache as Gr, updateEntry as Kr } from "./files/dial-file-manager-mapping.util.js";
102
- import { createFilesApiClient as qr } from "./files/create-files-api.js";
103
- import { createUploadFileWithProgress as Jr } from "./files/create-upload-file-with-progress.js";
104
- import { openAnnotationAttachment as Yr } from "./files/annotation.js";
105
- import { annotationToOoxmlCanvasContent as Xr, annotationToPdfCanvasContent as Zr, clearAttachmentCache as Qr, hasAttachmentTextSource as $r, referenceAttachmentToPdfCanvasContent as ei, resolveCodeCanvasContent as ti, resolveHtmlCanvasContent as ni, resolveImageCanvasContent as ri, resolveJsonCanvasContent as ii, resolveMarkdownCanvasContent as ai, resolveOoxmlCanvasContent as oi, resolvePdfCanvasContent as si, resolveTextCanvasContent as ci, resolveVisualizerCanvasContent as li } from "./files/attachment-canvas.js";
106
- import { getUrlFileName as ui, isExternalSourcePreviewable as di, resolveExternalSourceContentType as fi } from "./files/source-content.js";
107
- import { annotationToDisplayAttachment as pi, attachmentDtoToDisplayAttachment as mi, attachmentDtosToDisplayAttachments as hi } from "./files/attachment-dto-to-display.js";
108
- import { dialFileToAttachment as gi, dialFilesToAttachments as _i, dialFolderPathToAttachment as vi } from "./files/dial-file-to-attachment.js";
109
- import { DownloadDestinationType as yi } from "./files/download-destination.js";
110
- import { prepareDownloadDestination as bi } from "./files/prepare-download-destination.js";
111
- import { sanitizeFileName as xi, splitFileNameExtension as Si, trimFileNameToByteLimit as Ci } from "./files/file-name.js";
112
- import { useDialFileListing as wi } from "./files/useDialFileListing/useDialFileListing.js";
113
- import { useDialFileMetadata as Ti } from "./files/useDialFileMetadata/useDialFileMetadata.js";
114
- import { useDialFileMutations as Ei } from "./files/useDialFileMutations/useDialFileMutations.js";
115
- import { useDialFileSharing as Di } from "./files/useDialFileSharing/useDialFileSharing.js";
116
- import { useDialFileUploadBatch as Oi } from "./files/useDialFileUploadBatch/useDialFileUploadBatch.js";
117
- import { useDialFileManager as ki } from "./files/useDialFileManager/useDialFileManager.js";
118
- import { useDialFileManagerTabConfig as Ai } from "./files/useDialFileManagerTabConfig/useDialFileManagerTabConfig.js";
119
- import { isCustomAppSchema as ji, isQuickAppSchema as Mi } from "./shared/application-schema.js";
120
- import { getBrowserTimezone as Ni } from "./shared/browser-timezone.js";
121
- import { isValidAbsoluteUrl as Pi, isValidFeaturesData as Fi, parseFeaturesData as Ii } from "./shared/custom-apps.js";
122
- import { buildExternalServiceScopeId as Li, getExternalServiceFallbackName as Ri, parseExternalServiceUrl as zi } from "./shared/external-services.js";
123
- import { useChatSettingsFormConfig as Bi } from "./useChatSettingsFormConfig/useChatSettingsFormConfig.js";
124
- import { usePageFileDrag as Vi } from "./usePageFileDrag/usePageFileDrag.js";
125
- import { useViewportWidth as Hi } from "./useViewportWidth/useViewportWidth.js";
126
- import { usePanelMaxWidth as Ui } from "./usePanelMaxWidth/usePanelMaxWidth.js";
127
- import { useShareLink as Wi } from "./useShareLink/useShareLink.js";
128
- import { useToolsMenu as Gi } from "./useToolsMenu/useToolsMenu.js";
129
- import { useUsageData as Ki } from "./usage/useUsageData/useUsageData.js";
130
- import { McpAppResourceFetchError as qi, createMcpAppsApiClient as Ji } from "./mcp-apps/mcp-apps-api-client.js";
131
- import { useMcpAppTools as Yi } from "./mcp-apps/useMcpAppTools/useMcpAppTools.js";
132
- import { useMcpAppHostContext as Xi } from "./mcp-apps/useMcpAppHostContext/useMcpAppHostContext.js";
133
- import { useMcpAppHostAdapter as Zi } from "./mcp-apps/useMcpAppHostAdapter/useMcpAppHostAdapter.js";
134
- import { useOpenMcpAppCanvas as Qi } from "./mcp-apps/useOpenMcpAppCanvas/useOpenMcpAppCanvas.js";
135
- import { useGridEditingScroll as $i } from "@epam/ai-dial-chat-shared";
136
- export { b as AttachmentValidationErrorReason, zn as AudioTranscriptionError, Bn as AudioTranscriptionErrorReason, L as AuthenticationType, ur as COLUMNS_WITHOUT_AUTHOR, dr as COLUMNS_WITH_AUTHOR, fr as CORE_PERMISSION_MAP, Ze as CatalogPrimaryActionType, w as ConversationExportMode, T as ConversationTransferErrorCode, E as ConversationTransferWarningCode, pr as DATE_OPTIONS, Hn as DEFAULT_MAX_ARCHIVE_BYTES, _r as DialFileManagerActionProfile, vr as DialFileManagerVariant, or as DialFilesApiUploadMode, yi as DownloadDestinationType, O as EXPORT_APP_NAME, D as ExportFileNameKind, Ot as FavoriteEntityType, sr as FileManagerNotificationReason, cr as FileNameValidationErrorReason, lr as FileOperationKind, qi as McpAppResourceFetchError, Ie as McpResourceKind, it as OAuthResourceKind, mr as PATH_SEPARATOR_REGEXP, nn as PROMPT_CONTENT_MAX_LENGTH, rn as PROMPT_COUNTER_ANNOUNCE_THRESHOLD, an as PROMPT_DESCRIPTION_MAX_LENGTH, on as PROMPT_NAME_MAX_LENGTH, Ce as PUBLIC_SKILL_BUCKET, sn as PromptFieldError, ie as PromptSource, hr as RESERVED_MARKER_NAME, kn as RecipientsCountStatus, le as SKILL_FILE_UPLOAD_MAX_BYTES, we as SKILL_LISTING_MAX_PAGES, Te as SKILL_LISTING_PAGE_SIZE, ue as SKILL_MANIFEST_FILE, Ee as SKILL_MANIFEST_MAX_BYTES, de as SKILL_UPLOAD_MAX_FILES, fe as SKILL_UPLOAD_MAX_TOTAL_BYTES, Sn as SkillEditorLoadState, En as SkillPreviewErrorKind, De as SkillSource, at as TOOLSET_REDIRECT_STATE_KEY, ot as ToolsetAuthStatus, st as ToolsetAuthTypes, ct as ToolsetCredentialsLevel, wt as ToolsetLoginOutcomeType, lt as ToolsetOAuthCallbackQuery, ut as ToolsetOAuthChannelControlType, dt as ToolsetOAuthFailureReason, ft as ToolsetOAuthInitiationResultType, pt as ToolsetOAuthResultType, gr as UPLOAD_CONCURRENCY, mn as UnsupportedTriggerReason, mt as WithLogin, pi as annotationToDisplayAttachment, Xr as annotationToOoxmlCanvasContent, Zr as annotationToPdfCanvasContent, hn as apSchedulerDayToJsDay, U as appendLocaleCode, mi as attachmentDtoToDisplayAttachment, hi as attachmentDtosToDisplayAttachments, Wn as attachmentToDto, Gn as attachmentsToDtos, W as buildAdditionalLocaleOptions, jt as buildAnnouncementSignature, Le as buildApplicationMcpUrl, M as buildChatCompletionsUrl, Re as buildConnectApi, N as buildDeploymentConnectApi, Li as buildExternalServiceScopeId, Rr as buildFromCache, $t as buildPromptExportEnvelope, en as buildPromptExportFileName, oe as buildPromptOverview, cn as buildPromptPath, P as buildResponsesUrl, br as buildSharedItemVirtualPath, ke as buildSkillContentTree, pe as buildSkillFilesPayload, me as buildSkillManifest, he as buildSkillManifestForSubmit, ge as buildSkillManifestFromFrontmatter, Ae as buildSkillOverview, yt as buildToolsetAuthorizeUrl, ze as buildToolsetMcpUrl, Qr as clearAttachmentCache, G as composeLocalePayload, It as createChatStreamApi, i as createCsrfMiddleware, Ht as createDeploymentChangedMessage, qr as createFilesApiClient, Ji as createMcpAppsApiClient, Kn as createMessagePair, A as createPublishApiClient, a as createUnauthorizedMiddleware, Jr as createUploadFileWithProgress, B as decodeToolsetId, K as decomposeLocalizedFields, yr as deriveActionProfile, Ke as deriveAvailableTabIds, jn as deriveConversationRowActionState, qe as deriveFavoriteItems, xr as dialCorePathToRelative, gi as dialFileToAttachment, _i as dialFilesToAttachments, vi as dialFolderPathToAttachment, p as downloadAttachment, ht as emitToolsetLoginSuccess, F as encodeDeploymentId, V as encodeToolsetId, zr as fetchByTab, Br as fetchForSearch, tt as fetchSkillDescription, Je as filterCatalogItemsBySelector, Ye as filterHiddenOwnedItems, I as findDeploymentByIdOrReference, Sr as findDialFileByPath, Vr as findFirstSuccessfulCopyMoveItem, Cr as findFolderByVirtualPath, Rt as formatAppVersion, Y as formatCalendarDate, S as formatDateYM, C as formatDateYMD, wr as formatOperationFolderName, k as formatQuotedNameList, e as getApiErrorDetails, t as getApiErrorMessage, n as getApiErrorStatus, Ni as getBrowserTimezone, $n as getConversationPath, Fn as getConversationSource, Ri as getExternalServiceFallbackName, Ut as getLastDeploymentId, Wt as getLastUserMessageToolConfiguration, Bt as getModelIdFromConversationId, Nr as getParentFolderPath, Ve as getPublicCatalogEntityFolderPath, Yt as getQuickAppConversationStarters, ln as getRemainingCharacters, Zn as getStarterConversationText, Xt as getStarterPopulateText, Qn as getStarterSubmitText, Zt as getStartersFromSchema, Vt as getTimeOfDayGreeting, _t as getToolsetOAuthChannelName, bt as getToolsetRedirectUri, ui as getUrlFileName, Tr as getVirtualPathName, qn as hasActiveToolConfig, Mt as hasAnnouncementContent, $r as hasAttachmentTextSource, Er as hasDialFileWritePermission, Dr as hasForbiddenNameSymbols, Nt as hasStructuredAnnouncement, o as includesIgnoreCase, xt as initiateOAuthLogin, Jn as isAnswerIncomplete, rr as isAwaitingGenerationResume, r as isConversationNotFoundError, Or as isCopyMoveDuplicateAllowed, ji as isCustomAppSchema, g as isDialFileAcceptType, u as isDialFileId, m as isDownloadableAttachment, di as isExternalSourcePreviewable, Yn as isMessageChanged, Gt as isMessageStreaming, se as isOrganisationPromptItem, He as isPublicCatalogEntityId, H as isPublicToolsetId, Mi as isQuickAppSchema, kr as isShareActionsAllowed, Pi as isValidAbsoluteUrl, Fi as isValidFeaturesData, _e as isValidSkillRelativePath, gn as jsDayToApSchedulerDay, Hr as mapCorePermissions, Z as mapDeploymentDetailsDtoToEntityDetails, R as mapDeploymentLimitsDtoToCatalogLimits, z as mapDeploymentLimitsToInput, ee as mapDeploymentToCatalogItem, te as mapDeploymentToolsetCredentials, Q as mapEntityDetailsToCatalogDetails, Ur as mapFileMetadataToDialFile, _n as mapFormValuesToCreateBody, vn as mapFormValuesToUpdateBody, ce as mapPromptToCatalogItem, Ue as mapPublishConversationResultDto, We as mapPublishHistoryEntryDto, yn as mapScheduledTaskDtoToFormValues, Wr as mapSearchItem, je as mapSkillToCatalogItem, $ as mapToolsetCredentials, ne as mapToolsetToCatalogItem, Gr as mergeCreatedFolderIntoCache, Kt as messageHasStages, _ as mimeTypesToAttachmentExtensionLabels, v as mimeTypesToDialFileAcceptTypes, y as mimeTypesToFileAccept, ve as nameFromPath, St as navigateToolsetOAuthPopup, qt as normalizeResponseFormat, ye as normalizeSkillName, Ar as normalizeVirtualPath, Yr as openAnnotationAttachment, Ct as openToolsetOAuthPopup, X as padTwoDigits, zi as parseExternalServiceUrl, Ii as parseFeaturesData, jr as parseNewFolderVirtualPath, ae as parsePromptResourceUrl, be as parseSkillManifest, et as parseSkillManifestDocument, Oe as parseSkillResourceUrl, Ir as prepareCopyItems, bi as prepareDownloadDestination, Lr as prepareMoveRenameItems, Me as readSkillFileBytes, Ne as readSkillManifest, Xe as reconcileFilterTopics, ei as referenceAttachmentToPdfCanvasContent, Qe as resolveCatalogPrimaryAction, ti as resolveCodeCanvasContent, re as resolveDeploymentFolder, Pr as resolveDialFileApiPath, d as resolveDialFileBucketAndPath, fi as resolveExternalSourceContentType, ni as resolveHtmlCanvasContent, ri as resolveImageCanvasContent, ii as resolveJsonCanvasContent, q as resolveLocalizedText, ai as resolveMarkdownCanvasContent, Be as resolveMcpResourceKind, oi as resolveOoxmlCanvasContent, Mr as resolveOwnerCoords, si as resolvePdfCanvasContent, f as resolveRelativeDialFilePath, Pe as resolveSkillFileDownloadPath, Fe as resolveSkillManifestFileId, ci as resolveTextCanvasContent, li as resolveVisualizerCanvasContent, s as safeDecodeURI, c as safeDecodeURIComponent, Pt as sanitizeAnnouncementHtml, Ft as sanitizeAnnouncementMessageHtml, xi as sanitizeFileName, zt as sanitizeFooterHtml, tn as serializePromptExport, Xn as shouldRerunGenerationOnEdit, Lt as shouldWatchForDisplayNameUpdate, xe as skillFileBytesToBlob, xn as skillFileToAttachment, Si as splitFileNameExtension, l as stripSurroundingSlashes, gt as subscribeToolsetLoginSuccess, J as toBaseLocale, Jt as toOverlayMessages, Ge as toPublishEntityType, j as toPublishRuleDto, Ci as trimFileNameToByteLimit, Se as unpackSkillArchive, Kr as updateEntry, Mn as useActiveConversationSync, Nn as useAsyncConfirmDialog, h as useAttachmentAction, Rn as useAttachmentUpload, x as useAttachmentValidation, $e as useCatalogEditNavigation, rt as useCatalogItemDetails, Et as useCatalogToolsetCredentials, Bi as useChatSettingsFormConfig, Un as useConversationExport, er as useConversationHandlers, tr as useConversationImport, Pn as useConversationLookupMaps, In as useConversationPanelItems, nr as useConversationScroll, ar as useConversationSources, ir as useConversationStream, wi as useDialFileListing, ki as useDialFileManager, Ai as useDialFileManagerTabConfig, Ti as useDialFileMetadata, Ei as useDialFileMutations, Di as useDialFileSharing, Oi as useDialFileUploadBatch, kt as useFavoriteEntitiesState, $i as useGridEditingScroll, Ln as useImportFilePicker, Zi as useMcpAppHostAdapter, Xi as useMcpAppHostContext, Yi as useMcpAppTools, Qt as useOAuthCallbackCompletion, Qi as useOpenMcpAppCanvas, Vi as usePageFileDrag, Ui as usePanelMaxWidth, pn as usePromptsState, At as usePublishFolders, Wi as useShareLink, An as useShareRecipientsCount, Dt as useSkillDetailsPanelData, Cn as useSkillEditorLoad, wn as useSkillEditorSubmit, Tn as useSkillFileActions, Dn as useSkillFilePreview, nt as useSkillItemDetails, On as useSkillsState, Gi as useToolsMenu, Tt as useToolsetLogin, Vn as useTranscribeAudio, Ki as useUsageData, Hi as useViewportWidth, un as validatePromptContent, dn as validatePromptDescription, fn as validatePromptName, bn as validateSkillFileBatch, Fr as virtualPathToApiPath, vt as waitForToolsetOAuthResult };
48
+ import { DEFAULT_GENERATION_CONFLICT_MESSAGE as It, GenerationConflictError as Lt, createChatStreamApi as Rt } from "./conversation/create-chat-stream-api.js";
49
+ import { shouldWatchForDisplayNameUpdate as zt } from "./conversation/display-name-watch.js";
50
+ import { formatAppVersion as Bt, sanitizeFooterHtml as Vt } from "./conversation/footer-message.js";
51
+ import { getModelIdFromConversationId as Ht } from "./conversation/get-model-id-from-conversation-id.js";
52
+ import { getTimeOfDayGreeting as Ut } from "./conversation/greeting.js";
53
+ import { createDeploymentChangedMessage as Wt } from "./conversation/message-factory.js";
54
+ import { getLastDeploymentId as Gt, getLastUserMessageToolConfiguration as Kt, isMessageStreaming as qt, messageHasStages as Jt, normalizeResponseFormat as Yt } from "./conversation/message-utils.js";
55
+ import { toOverlayMessages as Xt } from "./conversation/overlay-messages.js";
56
+ import { getQuickAppConversationStarters as Zt } from "./conversation/quick-app-conversation-starters.js";
57
+ import { getStarterPopulateText as Qt, getStartersFromSchema as $t } from "./conversation/starter-option.js";
58
+ import { useOAuthCallbackCompletion as en } from "./oauth/useOAuthCallbackCompletion/useOAuthCallbackCompletion.js";
59
+ import { buildPromptExportEnvelope as tn, buildPromptExportFileName as nn, serializePromptExport as rn } from "./prompt/export-prompt.js";
60
+ import { PROMPT_CONTENT_MAX_LENGTH as an, PROMPT_COUNTER_ANNOUNCE_THRESHOLD as on, PROMPT_DESCRIPTION_MAX_LENGTH as sn, PROMPT_NAME_MAX_LENGTH as cn, PromptFieldError as ln, buildPromptPath as un, getRemainingCharacters as dn, validatePromptContent as fn, validatePromptDescription as pn, validatePromptName as mn } from "./prompt/prompt.js";
61
+ import { usePromptsState as hn } from "./prompt/usePromptsState/usePromptsState.js";
62
+ import { UnsupportedTriggerReason as gn } from "./scheduled-task/scheduled-task-mapping.js";
63
+ import { apSchedulerDayToJsDay as _n, jsDayToApSchedulerDay as vn } from "./shared/cron-weekday.js";
64
+ import { mapFormValuesToCreateBody as yn, mapFormValuesToUpdateBody as bn, mapScheduledTaskDtoToFormValues as xn } from "./scheduled-task/scheduled-task-trigger.js";
65
+ import { validateSkillFileBatch as Sn } from "./skill/skill-file-batch-validation.js";
66
+ import { skillFileToAttachment as Cn } from "./skill/skill-file-preview.js";
67
+ import { SkillEditorLoadState as wn, useSkillEditorLoad as Tn } from "./skill/useSkillEditorLoad.js";
68
+ import { useSkillEditorSubmit as En } from "./skill/useSkillEditorSubmit.js";
69
+ import { useSkillFileActions as Dn } from "./skill/useSkillFileActions.js";
70
+ import { SkillPreviewErrorKind as On, useSkillFilePreview as kn } from "./skill/useSkillFilePreview.js";
71
+ import { useSkillsState as An } from "./skill/useSkillsState/useSkillsState.js";
72
+ import { RecipientsCountStatus as jn, useShareRecipientsCount as Mn } from "./useShareRecipientsCount/useShareRecipientsCount.js";
73
+ import { deriveConversationRowActionState as Nn } from "./conversation/deriveConversationRowActionState/deriveConversationRowActionState.js";
74
+ import { useActiveConversationSync as Pn } from "./conversation/useActiveConversationSync/useActiveConversationSync.js";
75
+ import { useAsyncConfirmDialog as Fn } from "./conversation/useAsyncConfirmDialog/useAsyncConfirmDialog.js";
76
+ import { useConversationLookupMaps as In } from "./conversation/useConversationLookupMaps/useConversationLookupMaps.js";
77
+ import { getConversationSource as Ln, useConversationPanelItems as Rn } from "./conversation/useConversationPanelItems/useConversationPanelItems.js";
78
+ import { useImportFilePicker as zn } from "./conversation/useImportFilePicker/useImportFilePicker.js";
79
+ import { useAttachmentUpload as Bn } from "./conversation/useAttachmentUpload/useAttachmentUpload.js";
80
+ import { AudioTranscriptionError as Vn, AudioTranscriptionErrorReason as Hn } from "./conversation/useTranscribeAudio/audio-transcription-error.js";
81
+ import { useTranscribeAudio as Un } from "./conversation/useTranscribeAudio/useTranscribeAudio.js";
82
+ import { DEFAULT_MAX_ARCHIVE_BYTES as Wn, useConversationExport as Gn } from "./conversation/useConversationExport/useConversationExport.js";
83
+ import { attachmentToDto as Kn, attachmentsToDtos as qn } from "./conversation/useConversationHandlers/attachment-to-dto.js";
84
+ import { createMessagePair as Jn } from "./conversation/useConversationHandlers/message-factory.js";
85
+ import { hasActiveToolConfig as Yn, isAnswerIncomplete as Xn, isMessageChanged as Zn, shouldRerunGenerationOnEdit as Qn } from "./conversation/useConversationHandlers/message-utils.js";
86
+ import { getStarterConversationText as $n, getStarterSubmitText as er } from "./conversation/useConversationHandlers/starter-option.js";
87
+ import { getConversationPath as tr } from "./conversation/useConversationStream/conversation-path.js";
88
+ import { useConversationHandlers as nr } from "./conversation/useConversationHandlers/useConversationHandlers.js";
89
+ import { useConversationImport as rr } from "./conversation/useConversationImport/useConversationImport.js";
90
+ import { useConversationScroll as ir } from "./conversation/useConversationScroll/useConversationScroll.js";
91
+ import { isAwaitingGenerationResume as ar } from "./conversation/useConversationStream/generation-resume.js";
92
+ import { useConversationStream as or } from "./conversation/useConversationStream/useConversationStream.js";
93
+ import { useConversationSources as sr } from "./conversation-sources/useConversationSources/useConversationSources.js";
94
+ import { DialFilesApiUploadMode as cr } from "./files/dial-files-api.js";
95
+ import { FileManagerNotificationReason as lr, FileNameValidationErrorReason as ur, FileOperationKind as dr } from "./files/dial-file-manager.types.js";
96
+ import { COLUMNS_WITHOUT_AUTHOR as fr, COLUMNS_WITH_AUTHOR as pr, CORE_PERMISSION_MAP as mr, DATE_OPTIONS as hr, PATH_SEPARATOR_REGEXP as gr, RESERVED_MARKER_NAME as _r, UPLOAD_CONCURRENCY as vr } from "./files/dial-file-manager.model.js";
97
+ import { DialFileManagerActionProfile as yr, DialFileManagerVariant as br, deriveActionProfile as xr } from "./files/file-manager-variant.js";
98
+ import { buildSharedItemVirtualPath as Sr, dialCorePathToRelative as Cr, findDialFileByPath as wr, findFolderByVirtualPath as Tr, formatOperationFolderName as Er, getVirtualPathName as Dr, hasDialFileWritePermission as Or, hasForbiddenNameSymbols as kr, isCopyMoveDuplicateAllowed as Ar, isShareActionsAllowed as jr, normalizeVirtualPath as Mr, parseNewFolderVirtualPath as Nr, resolveOwnerCoords as Pr } from "./files/dial-file-manager-path.util.js";
99
+ import { getParentFolderPath as Fr, resolveDialFileApiPath as Ir, virtualPathToApiPath as Lr } from "./files/resolve-dial-file-api-path.js";
100
+ import { prepareCopyItems as Rr, prepareMoveRenameItems as zr } from "./files/dial-file-manager-copy-move.util.js";
101
+ import { buildFromCache as Br, fetchByTab as Vr, fetchForSearch as Hr, findFirstSuccessfulCopyMoveItem as Ur, mapCorePermissions as Wr, mapFileMetadataToDialFile as Gr, mapSearchItem as Kr, mergeCreatedFolderIntoCache as qr, updateEntry as Jr } from "./files/dial-file-manager-mapping.util.js";
102
+ import { createFilesApiClient as Yr } from "./files/create-files-api.js";
103
+ import { createUploadFileWithProgress as Xr } from "./files/create-upload-file-with-progress.js";
104
+ import { openAnnotationAttachment as Zr } from "./files/annotation.js";
105
+ import { annotationToOoxmlCanvasContent as Qr, annotationToPdfCanvasContent as $r, clearAttachmentCache as ei, hasAttachmentTextSource as ti, referenceAttachmentToPdfCanvasContent as ni, resolveCodeCanvasContent as ri, resolveHtmlCanvasContent as ii, resolveImageCanvasContent as ai, resolveJsonCanvasContent as oi, resolveMarkdownCanvasContent as si, resolveOoxmlCanvasContent as ci, resolvePdfCanvasContent as li, resolveTextCanvasContent as ui, resolveVisualizerCanvasContent as di } from "./files/attachment-canvas.js";
106
+ import { getUrlFileName as fi, isExternalSourcePreviewable as pi, resolveExternalSourceContentType as mi } from "./files/source-content.js";
107
+ import { annotationToDisplayAttachment as hi, attachmentDtoToDisplayAttachment as gi, attachmentDtosToDisplayAttachments as _i } from "./files/attachment-dto-to-display.js";
108
+ import { dialFileToAttachment as vi, dialFilesToAttachments as yi, dialFolderPathToAttachment as bi } from "./files/dial-file-to-attachment.js";
109
+ import { DownloadDestinationType as xi } from "./files/download-destination.js";
110
+ import { prepareDownloadDestination as Si } from "./files/prepare-download-destination.js";
111
+ import { sanitizeFileName as Ci, splitFileNameExtension as wi, trimFileNameToByteLimit as Ti } from "./files/file-name.js";
112
+ import { useDialFileListing as Ei } from "./files/useDialFileListing/useDialFileListing.js";
113
+ import { useDialFileMetadata as Di } from "./files/useDialFileMetadata/useDialFileMetadata.js";
114
+ import { useDialFileMutations as Oi } from "./files/useDialFileMutations/useDialFileMutations.js";
115
+ import { useDialFileSharing as ki } from "./files/useDialFileSharing/useDialFileSharing.js";
116
+ import { useDialFileUploadBatch as Ai } from "./files/useDialFileUploadBatch/useDialFileUploadBatch.js";
117
+ import { useDialFileManager as ji } from "./files/useDialFileManager/useDialFileManager.js";
118
+ import { useDialFileManagerTabConfig as Mi } from "./files/useDialFileManagerTabConfig/useDialFileManagerTabConfig.js";
119
+ import { isCustomAppSchema as Ni, isQuickAppSchema as Pi } from "./shared/application-schema.js";
120
+ import { getBrowserTimezone as Fi } from "./shared/browser-timezone.js";
121
+ import { isValidAbsoluteUrl as Ii, isValidFeaturesData as Li, parseFeaturesData as Ri } from "./shared/custom-apps.js";
122
+ import { buildExternalServiceScopeId as zi, getExternalServiceFallbackName as Bi, parseExternalServiceUrl as Vi } from "./shared/external-services.js";
123
+ import { useChatSettingsFormConfig as Hi } from "./useChatSettingsFormConfig/useChatSettingsFormConfig.js";
124
+ import { usePageFileDrag as Ui } from "./usePageFileDrag/usePageFileDrag.js";
125
+ import { useViewportWidth as Wi } from "./useViewportWidth/useViewportWidth.js";
126
+ import { usePanelMaxWidth as Gi } from "./usePanelMaxWidth/usePanelMaxWidth.js";
127
+ import { useShareLink as Ki } from "./useShareLink/useShareLink.js";
128
+ import { useToolsMenu as qi } from "./useToolsMenu/useToolsMenu.js";
129
+ import { useUsageData as Ji } from "./usage/useUsageData/useUsageData.js";
130
+ import { McpAppResourceFetchError as Yi, createMcpAppsApiClient as Xi } from "./mcp-apps/mcp-apps-api-client.js";
131
+ import { useMcpAppTools as Zi } from "./mcp-apps/useMcpAppTools/useMcpAppTools.js";
132
+ import { useMcpAppHostContext as Qi } from "./mcp-apps/useMcpAppHostContext/useMcpAppHostContext.js";
133
+ import { useMcpAppHostAdapter as $i } from "./mcp-apps/useMcpAppHostAdapter/useMcpAppHostAdapter.js";
134
+ import { useOpenMcpAppCanvas as ea } from "./mcp-apps/useOpenMcpAppCanvas/useOpenMcpAppCanvas.js";
135
+ import { useGridEditingScroll as ta } from "@epam/ai-dial-chat-shared";
136
+ export { b as AttachmentValidationErrorReason, Vn as AudioTranscriptionError, Hn as AudioTranscriptionErrorReason, L as AuthenticationType, fr as COLUMNS_WITHOUT_AUTHOR, pr as COLUMNS_WITH_AUTHOR, mr as CORE_PERMISSION_MAP, Ze as CatalogPrimaryActionType, w as ConversationExportMode, T as ConversationTransferErrorCode, E as ConversationTransferWarningCode, hr as DATE_OPTIONS, It as DEFAULT_GENERATION_CONFLICT_MESSAGE, Wn as DEFAULT_MAX_ARCHIVE_BYTES, yr as DialFileManagerActionProfile, br as DialFileManagerVariant, cr as DialFilesApiUploadMode, xi as DownloadDestinationType, O as EXPORT_APP_NAME, D as ExportFileNameKind, Ot as FavoriteEntityType, lr as FileManagerNotificationReason, ur as FileNameValidationErrorReason, dr as FileOperationKind, Lt as GenerationConflictError, Yi as McpAppResourceFetchError, Ie as McpResourceKind, it as OAuthResourceKind, gr as PATH_SEPARATOR_REGEXP, an as PROMPT_CONTENT_MAX_LENGTH, on as PROMPT_COUNTER_ANNOUNCE_THRESHOLD, sn as PROMPT_DESCRIPTION_MAX_LENGTH, cn as PROMPT_NAME_MAX_LENGTH, Ce as PUBLIC_SKILL_BUCKET, ln as PromptFieldError, ie as PromptSource, _r as RESERVED_MARKER_NAME, jn as RecipientsCountStatus, le as SKILL_FILE_UPLOAD_MAX_BYTES, we as SKILL_LISTING_MAX_PAGES, Te as SKILL_LISTING_PAGE_SIZE, ue as SKILL_MANIFEST_FILE, Ee as SKILL_MANIFEST_MAX_BYTES, de as SKILL_UPLOAD_MAX_FILES, fe as SKILL_UPLOAD_MAX_TOTAL_BYTES, wn as SkillEditorLoadState, On as SkillPreviewErrorKind, De as SkillSource, at as TOOLSET_REDIRECT_STATE_KEY, ot as ToolsetAuthStatus, st as ToolsetAuthTypes, ct as ToolsetCredentialsLevel, wt as ToolsetLoginOutcomeType, lt as ToolsetOAuthCallbackQuery, ut as ToolsetOAuthChannelControlType, dt as ToolsetOAuthFailureReason, ft as ToolsetOAuthInitiationResultType, pt as ToolsetOAuthResultType, vr as UPLOAD_CONCURRENCY, gn as UnsupportedTriggerReason, mt as WithLogin, hi as annotationToDisplayAttachment, Qr as annotationToOoxmlCanvasContent, $r as annotationToPdfCanvasContent, _n as apSchedulerDayToJsDay, U as appendLocaleCode, gi as attachmentDtoToDisplayAttachment, _i as attachmentDtosToDisplayAttachments, Kn as attachmentToDto, qn as attachmentsToDtos, W as buildAdditionalLocaleOptions, jt as buildAnnouncementSignature, Le as buildApplicationMcpUrl, M as buildChatCompletionsUrl, Re as buildConnectApi, N as buildDeploymentConnectApi, zi as buildExternalServiceScopeId, Br as buildFromCache, tn as buildPromptExportEnvelope, nn as buildPromptExportFileName, oe as buildPromptOverview, un as buildPromptPath, P as buildResponsesUrl, Sr as buildSharedItemVirtualPath, ke as buildSkillContentTree, pe as buildSkillFilesPayload, me as buildSkillManifest, he as buildSkillManifestForSubmit, ge as buildSkillManifestFromFrontmatter, Ae as buildSkillOverview, yt as buildToolsetAuthorizeUrl, ze as buildToolsetMcpUrl, ei as clearAttachmentCache, G as composeLocalePayload, Rt as createChatStreamApi, i as createCsrfMiddleware, Wt as createDeploymentChangedMessage, Yr as createFilesApiClient, Xi as createMcpAppsApiClient, Jn as createMessagePair, A as createPublishApiClient, a as createUnauthorizedMiddleware, Xr as createUploadFileWithProgress, B as decodeToolsetId, K as decomposeLocalizedFields, xr as deriveActionProfile, Ke as deriveAvailableTabIds, Nn as deriveConversationRowActionState, qe as deriveFavoriteItems, Cr as dialCorePathToRelative, vi as dialFileToAttachment, yi as dialFilesToAttachments, bi as dialFolderPathToAttachment, p as downloadAttachment, ht as emitToolsetLoginSuccess, F as encodeDeploymentId, V as encodeToolsetId, Vr as fetchByTab, Hr as fetchForSearch, tt as fetchSkillDescription, Je as filterCatalogItemsBySelector, Ye as filterHiddenOwnedItems, I as findDeploymentByIdOrReference, wr as findDialFileByPath, Ur as findFirstSuccessfulCopyMoveItem, Tr as findFolderByVirtualPath, Bt as formatAppVersion, Y as formatCalendarDate, S as formatDateYM, C as formatDateYMD, Er as formatOperationFolderName, k as formatQuotedNameList, e as getApiErrorDetails, t as getApiErrorMessage, n as getApiErrorStatus, Fi as getBrowserTimezone, tr as getConversationPath, Ln as getConversationSource, Bi as getExternalServiceFallbackName, Gt as getLastDeploymentId, Kt as getLastUserMessageToolConfiguration, Ht as getModelIdFromConversationId, Fr as getParentFolderPath, Ve as getPublicCatalogEntityFolderPath, Zt as getQuickAppConversationStarters, dn as getRemainingCharacters, $n as getStarterConversationText, Qt as getStarterPopulateText, er as getStarterSubmitText, $t as getStartersFromSchema, Ut as getTimeOfDayGreeting, _t as getToolsetOAuthChannelName, bt as getToolsetRedirectUri, fi as getUrlFileName, Dr as getVirtualPathName, Yn as hasActiveToolConfig, Mt as hasAnnouncementContent, ti as hasAttachmentTextSource, Or as hasDialFileWritePermission, kr as hasForbiddenNameSymbols, Nt as hasStructuredAnnouncement, o as includesIgnoreCase, xt as initiateOAuthLogin, Xn as isAnswerIncomplete, ar as isAwaitingGenerationResume, r as isConversationNotFoundError, Ar as isCopyMoveDuplicateAllowed, Ni as isCustomAppSchema, g as isDialFileAcceptType, u as isDialFileId, m as isDownloadableAttachment, pi as isExternalSourcePreviewable, Zn as isMessageChanged, qt as isMessageStreaming, se as isOrganisationPromptItem, He as isPublicCatalogEntityId, H as isPublicToolsetId, Pi as isQuickAppSchema, jr as isShareActionsAllowed, Ii as isValidAbsoluteUrl, Li as isValidFeaturesData, _e as isValidSkillRelativePath, vn as jsDayToApSchedulerDay, Wr as mapCorePermissions, Z as mapDeploymentDetailsDtoToEntityDetails, R as mapDeploymentLimitsDtoToCatalogLimits, z as mapDeploymentLimitsToInput, ee as mapDeploymentToCatalogItem, te as mapDeploymentToolsetCredentials, Q as mapEntityDetailsToCatalogDetails, Gr as mapFileMetadataToDialFile, yn as mapFormValuesToCreateBody, bn as mapFormValuesToUpdateBody, ce as mapPromptToCatalogItem, Ue as mapPublishConversationResultDto, We as mapPublishHistoryEntryDto, xn as mapScheduledTaskDtoToFormValues, Kr as mapSearchItem, je as mapSkillToCatalogItem, $ as mapToolsetCredentials, ne as mapToolsetToCatalogItem, qr as mergeCreatedFolderIntoCache, Jt as messageHasStages, _ as mimeTypesToAttachmentExtensionLabels, v as mimeTypesToDialFileAcceptTypes, y as mimeTypesToFileAccept, ve as nameFromPath, St as navigateToolsetOAuthPopup, Yt as normalizeResponseFormat, ye as normalizeSkillName, Mr as normalizeVirtualPath, Zr as openAnnotationAttachment, Ct as openToolsetOAuthPopup, X as padTwoDigits, Vi as parseExternalServiceUrl, Ri as parseFeaturesData, Nr as parseNewFolderVirtualPath, ae as parsePromptResourceUrl, be as parseSkillManifest, et as parseSkillManifestDocument, Oe as parseSkillResourceUrl, Rr as prepareCopyItems, Si as prepareDownloadDestination, zr as prepareMoveRenameItems, Me as readSkillFileBytes, Ne as readSkillManifest, Xe as reconcileFilterTopics, ni as referenceAttachmentToPdfCanvasContent, Qe as resolveCatalogPrimaryAction, ri as resolveCodeCanvasContent, re as resolveDeploymentFolder, Ir as resolveDialFileApiPath, d as resolveDialFileBucketAndPath, mi as resolveExternalSourceContentType, ii as resolveHtmlCanvasContent, ai as resolveImageCanvasContent, oi as resolveJsonCanvasContent, q as resolveLocalizedText, si as resolveMarkdownCanvasContent, Be as resolveMcpResourceKind, ci as resolveOoxmlCanvasContent, Pr as resolveOwnerCoords, li as resolvePdfCanvasContent, f as resolveRelativeDialFilePath, Pe as resolveSkillFileDownloadPath, Fe as resolveSkillManifestFileId, ui as resolveTextCanvasContent, di as resolveVisualizerCanvasContent, s as safeDecodeURI, c as safeDecodeURIComponent, Pt as sanitizeAnnouncementHtml, Ft as sanitizeAnnouncementMessageHtml, Ci as sanitizeFileName, Vt as sanitizeFooterHtml, rn as serializePromptExport, Qn as shouldRerunGenerationOnEdit, zt as shouldWatchForDisplayNameUpdate, xe as skillFileBytesToBlob, Cn as skillFileToAttachment, wi as splitFileNameExtension, l as stripSurroundingSlashes, gt as subscribeToolsetLoginSuccess, J as toBaseLocale, Xt as toOverlayMessages, Ge as toPublishEntityType, j as toPublishRuleDto, Ti as trimFileNameToByteLimit, Se as unpackSkillArchive, Jr as updateEntry, Pn as useActiveConversationSync, Fn as useAsyncConfirmDialog, h as useAttachmentAction, Bn as useAttachmentUpload, x as useAttachmentValidation, $e as useCatalogEditNavigation, rt as useCatalogItemDetails, Et as useCatalogToolsetCredentials, Hi as useChatSettingsFormConfig, Gn as useConversationExport, nr as useConversationHandlers, rr as useConversationImport, In as useConversationLookupMaps, Rn as useConversationPanelItems, ir as useConversationScroll, sr as useConversationSources, or as useConversationStream, Ei as useDialFileListing, ji as useDialFileManager, Mi as useDialFileManagerTabConfig, Di as useDialFileMetadata, Oi as useDialFileMutations, ki as useDialFileSharing, Ai as useDialFileUploadBatch, kt as useFavoriteEntitiesState, ta as useGridEditingScroll, zn as useImportFilePicker, $i as useMcpAppHostAdapter, Qi as useMcpAppHostContext, Zi as useMcpAppTools, en as useOAuthCallbackCompletion, ea as useOpenMcpAppCanvas, Ui as usePageFileDrag, Gi as usePanelMaxWidth, hn as usePromptsState, At as usePublishFolders, Ki as useShareLink, Mn as useShareRecipientsCount, Dt as useSkillDetailsPanelData, Tn as useSkillEditorLoad, En as useSkillEditorSubmit, Dn as useSkillFileActions, kn as useSkillFilePreview, nt as useSkillItemDetails, An as useSkillsState, qi as useToolsMenu, Tt as useToolsetLogin, Un as useTranscribeAudio, Ji as useUsageData, Wi as useViewportWidth, fn as validatePromptContent, pn as validatePromptDescription, mn as validatePromptName, Sn as validateSkillFileBatch, Lr as virtualPathToApiPath, vt as waitForToolsetOAuthResult };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@epam/ai-dial-chat-hooks",
3
3
  "description": "Framework-level React hooks extracted from AI DIAL Chat for building custom chat interfaces",
4
- "version": "1.1.0-dev.435",
4
+ "version": "1.1.0-dev.438",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
7
7
  "main": "./index.js",
@@ -104,21 +104,21 @@
104
104
  },
105
105
  "peerDependencies": {
106
106
  "react": "^19.2.6",
107
- "@epam/ai-dial-attachment-canvas": "1.1.0-dev.435",
108
- "@epam/ai-dial-attachment-input": "1.1.0-dev.435",
109
- "@epam/ai-dial-catalog": "1.1.0-dev.435",
110
- "@epam/ai-dial-chat-api-client": "1.1.0-dev.435",
111
- "@epam/ai-dial-chat-overlay": "1.1.0-dev.435",
112
- "@epam/ai-dial-chat-shared": "1.1.0-dev.435",
113
- "@epam/ai-dial-deployment-creation-form": "1.1.0-dev.435",
114
- "@epam/ai-dial-mcp-apps": "1.1.0-dev.435",
115
- "@epam/ai-dial-publish-panel": "1.1.0-dev.435",
116
- "@epam/ai-dial-quotations": "1.1.0-dev.435",
107
+ "@epam/ai-dial-attachment-canvas": "1.1.0-dev.438",
108
+ "@epam/ai-dial-attachment-input": "1.1.0-dev.438",
109
+ "@epam/ai-dial-catalog": "1.1.0-dev.438",
110
+ "@epam/ai-dial-chat-api-client": "1.1.0-dev.438",
111
+ "@epam/ai-dial-chat-overlay": "1.1.0-dev.438",
112
+ "@epam/ai-dial-chat-shared": "1.1.0-dev.438",
113
+ "@epam/ai-dial-deployment-creation-form": "1.1.0-dev.438",
114
+ "@epam/ai-dial-mcp-apps": "1.1.0-dev.438",
115
+ "@epam/ai-dial-publish-panel": "1.1.0-dev.438",
116
+ "@epam/ai-dial-quotations": "1.1.0-dev.438",
117
117
  "@epam/ai-dial-react-file-manager": "*",
118
- "@epam/ai-dial-scheduled-tasks": "1.1.0-dev.435",
119
- "@epam/ai-dial-share": "1.1.0-dev.435",
120
- "@epam/ai-dial-skill-editor": "1.1.0-dev.435",
121
- "@epam/ai-dial-source-panel": "1.1.0-dev.435",
118
+ "@epam/ai-dial-scheduled-tasks": "1.1.0-dev.438",
119
+ "@epam/ai-dial-share": "1.1.0-dev.438",
120
+ "@epam/ai-dial-skill-editor": "1.1.0-dev.438",
121
+ "@epam/ai-dial-source-panel": "1.1.0-dev.438",
122
122
  "@epam/ai-dial-ui-kit": "*",
123
123
  "@modelcontextprotocol/sdk": "^1.27.1",
124
124
  "@epam/pdf-highlighter-kit": ">=0.0.14",