@epam/ai-dial-chat-hooks 1.1.0-dev.443 → 1.1.0-dev.444
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/conversation/conversation-transfer/attachment-refs.js +32 -7
- package/conversation/conversation-transfer/import-conversation.js +86 -44
- package/conversation/message-utils.js +1 -0
- package/conversation/useConversationHandlers/starter-option.js +5 -5
- package/conversation/useConversationHandlers/useConversationHandlers.js +135 -135
- package/conversation.d.ts +23 -2
- package/conversation.js +8 -8
- package/index.d.ts +23 -2
- package/index.js +50 -50
- package/package.json +15 -15
|
@@ -1,11 +1,36 @@
|
|
|
1
1
|
//#region src/conversation/conversation-transfer/attachment-refs.ts
|
|
2
|
-
var e = (e) => e.startsWith("files/"), t = (
|
|
3
|
-
let n =
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
var e = (e) => e.startsWith("files/"), t = /^#[\w.=%-]*$/, n = (e) => {
|
|
3
|
+
let n = e.indexOf("#");
|
|
4
|
+
if (n < 0) return {
|
|
5
|
+
fileId: e,
|
|
6
|
+
anchor: ""
|
|
7
|
+
};
|
|
8
|
+
let r = e.slice(n);
|
|
9
|
+
return {
|
|
10
|
+
fileId: e.slice(0, n),
|
|
11
|
+
anchor: t.test(r) ? r : ""
|
|
12
|
+
};
|
|
13
|
+
}, r = (e, t) => {
|
|
14
|
+
for (let n of e.messages) {
|
|
15
|
+
let e = n.custom_content;
|
|
16
|
+
if (e) {
|
|
17
|
+
for (let n of e.attachments ?? []) t(n);
|
|
18
|
+
for (let n of e.stages ?? []) for (let e of n.attachments ?? []) t(e);
|
|
19
|
+
for (let n of e.annotations ?? []) {
|
|
20
|
+
let e = n.body?.source?.attachment;
|
|
21
|
+
e && t(e);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
7
24
|
}
|
|
8
|
-
|
|
25
|
+
}, i = (t) => {
|
|
26
|
+
let i = /* @__PURE__ */ new Set(), a = (t) => {
|
|
27
|
+
if (t == null) return;
|
|
28
|
+
let { fileId: r } = n(t);
|
|
29
|
+
e(r) && i.add(r);
|
|
30
|
+
};
|
|
31
|
+
return r(t, (e) => {
|
|
32
|
+
a(e.url), a(e.reference_url);
|
|
33
|
+
}), Array.from(i, (e) => ({ fileId: e }));
|
|
9
34
|
};
|
|
10
35
|
//#endregion
|
|
11
|
-
export {
|
|
36
|
+
export { i as collectAttachmentRefs, n as splitFileIdAnchor };
|
|
@@ -1,88 +1,130 @@
|
|
|
1
|
-
import { collectAttachmentRefs as e } from "./attachment-refs.js";
|
|
2
|
-
import { resolveDialFileBucketAndPath as
|
|
3
|
-
import { generateUUID as
|
|
1
|
+
import { collectAttachmentRefs as e, splitFileIdAnchor as t } from "./attachment-refs.js";
|
|
2
|
+
import { resolveDialFileBucketAndPath as n } from "./dial-file-resolve.js";
|
|
3
|
+
import { generateUUID as r, sanitizeConversationName as i, stripTrailingDots as a, truncateToUtf8Bytes as o } from "@epam/ai-dial-chat-shared";
|
|
4
4
|
//#region src/conversation/conversation-transfer/import-conversation.ts
|
|
5
|
-
var
|
|
5
|
+
var s = class extends Error {
|
|
6
6
|
constructor(e) {
|
|
7
7
|
super(e), this.name = "UnsupportedImportFormatError";
|
|
8
8
|
}
|
|
9
|
-
},
|
|
9
|
+
}, c = (e) => typeof e == "object" && !!e, l = 5, u = (e) => {
|
|
10
10
|
let t;
|
|
11
11
|
try {
|
|
12
12
|
t = JSON.parse(e);
|
|
13
13
|
} catch {
|
|
14
|
-
throw new
|
|
14
|
+
throw new s("Import file is not valid JSON");
|
|
15
15
|
}
|
|
16
|
-
if (!
|
|
16
|
+
if (!c(t) || t.version !== l || !Array.isArray(t.history)) throw new s("Import file is not a supported export format");
|
|
17
17
|
let n = Array.isArray(t.folders) ? t.folders : [];
|
|
18
18
|
return {
|
|
19
|
-
version:
|
|
19
|
+
version: l,
|
|
20
20
|
history: t.history,
|
|
21
21
|
folders: n
|
|
22
22
|
};
|
|
23
|
-
},
|
|
24
|
-
let i = e.split(
|
|
25
|
-
if (i.length < 2) return [e,
|
|
26
|
-
let a =
|
|
23
|
+
}, d = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i, f = "__", p = 255, m = "applications", h = /[-+]/, g = /^\d+$/, _ = (e) => e ? e.split(h)[0].split(".").every((e) => g.test(e)) : !1, v = (e) => a(o(e.replace(/\r\n|\r/g, "\n").split("\n").map((e) => i(e).trim()).filter(Boolean)[0] ?? "", p)).trimEnd(), y = (e, t, n) => {
|
|
24
|
+
let i = e.split(f);
|
|
25
|
+
if (i.length < 2) return [e, r()].join(f);
|
|
26
|
+
let a = n && _(i[1]) ? i.slice(0, 2) : i.slice(0, 1), o = a.length > 1 ? d.test(i[i.length - 1]) : i.length >= 3, s = i.slice(a.length, o ? -1 : void 0).join(f);
|
|
27
27
|
return [
|
|
28
28
|
...a,
|
|
29
29
|
t || s,
|
|
30
|
-
|
|
31
|
-
].join(
|
|
32
|
-
},
|
|
33
|
-
let n =
|
|
30
|
+
r()
|
|
31
|
+
].join(f);
|
|
32
|
+
}, b = "conversations/", x = (e) => e.startsWith(b) ? e.slice(14) : e, S = (e, t) => {
|
|
33
|
+
let n = x(e.id), r = n.split("/"), i = x(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 = v(e.name), f = y(l, d, u[0] === m), p = [...u, f].join("/"), h = o.length ? `${t}/${o.join("/")}` : t;
|
|
34
34
|
return {
|
|
35
35
|
conversation: {
|
|
36
36
|
...e,
|
|
37
37
|
...d ? { name: d } : {},
|
|
38
|
-
id: `${t}/${
|
|
38
|
+
id: `${t}/${p}`,
|
|
39
39
|
folderId: h
|
|
40
40
|
},
|
|
41
|
-
subPath:
|
|
41
|
+
subPath: p
|
|
42
42
|
};
|
|
43
|
-
},
|
|
44
|
-
let t =
|
|
43
|
+
}, C = (e) => {
|
|
44
|
+
let t = x(e.folderId).split("/").filter(Boolean).slice(1);
|
|
45
45
|
return t.length ? t.join(" / ") : void 0;
|
|
46
|
-
},
|
|
46
|
+
}, w = (e) => e.map((e) => `"${e}"`).join(", "), T = (e, n) => {
|
|
47
|
+
if (!e) return;
|
|
48
|
+
let { fileId: r, anchor: i } = t(e), a = n.get(r);
|
|
49
|
+
if (a != null) return {
|
|
50
|
+
...a,
|
|
51
|
+
url: `${a.url}${i}`
|
|
52
|
+
};
|
|
53
|
+
}, E = (e, t) => {
|
|
54
|
+
let n = T(e.url, t), r = T(e.reference_url, t);
|
|
55
|
+
if (n == null && r == null) return;
|
|
56
|
+
let i = n?.title ?? r?.title;
|
|
57
|
+
return {
|
|
58
|
+
...n == null ? {} : { url: n.url },
|
|
59
|
+
...r == null ? {} : { reference_url: r.url },
|
|
60
|
+
...i == null ? {} : { title: i }
|
|
61
|
+
};
|
|
62
|
+
}, D = (e, t) => e.map((e) => e.attachments?.length ? {
|
|
63
|
+
...e,
|
|
64
|
+
attachments: e.attachments.map((e) => {
|
|
65
|
+
let n = E(e, t);
|
|
66
|
+
return n ? {
|
|
67
|
+
...e,
|
|
68
|
+
...n
|
|
69
|
+
} : e;
|
|
70
|
+
})
|
|
71
|
+
} : e), O = (e, t) => e.map((e) => {
|
|
72
|
+
let n = e.body?.source;
|
|
73
|
+
if (n?.attachment == null) return e;
|
|
74
|
+
let r = E(n.attachment, t);
|
|
75
|
+
return r == null ? e : {
|
|
76
|
+
...e,
|
|
77
|
+
body: {
|
|
78
|
+
...e.body,
|
|
79
|
+
source: {
|
|
80
|
+
...n,
|
|
81
|
+
attachment: {
|
|
82
|
+
...n.attachment,
|
|
83
|
+
...r
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
}), k = (e, t) => ({
|
|
47
89
|
...e,
|
|
48
90
|
messages: e.messages.map((e) => {
|
|
49
|
-
let n = e.custom_content
|
|
50
|
-
|
|
91
|
+
let n = e.custom_content;
|
|
92
|
+
if (!n) return e;
|
|
93
|
+
let { attachments: r, stages: i, annotations: a } = n;
|
|
94
|
+
return !r?.length && !i?.length && !a?.length ? e : {
|
|
51
95
|
...e,
|
|
52
96
|
custom_content: {
|
|
53
|
-
...
|
|
54
|
-
attachments:
|
|
55
|
-
let n =
|
|
56
|
-
|
|
57
|
-
let i = n?.title ?? r?.title;
|
|
58
|
-
return {
|
|
97
|
+
...n,
|
|
98
|
+
...r?.length ? { attachments: r.map((e) => {
|
|
99
|
+
let n = E(e, t);
|
|
100
|
+
return n ? {
|
|
59
101
|
...e,
|
|
60
|
-
...n
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
102
|
+
...n
|
|
103
|
+
} : e;
|
|
104
|
+
}) } : {},
|
|
105
|
+
...i?.length ? { stages: D(i, t) } : {},
|
|
106
|
+
...a?.length ? { annotations: O(a, t) } : {}
|
|
65
107
|
}
|
|
66
|
-
}
|
|
108
|
+
};
|
|
67
109
|
})
|
|
68
|
-
}),
|
|
110
|
+
}), A = (e) => e.split("/").pop() || e, j = (t, r, i) => {
|
|
69
111
|
let a = [], o = [];
|
|
70
|
-
for (let s of e(
|
|
71
|
-
let e =
|
|
112
|
+
for (let s of e(t)) {
|
|
113
|
+
let e = n(s.fileId);
|
|
72
114
|
if (!e) {
|
|
73
|
-
o.push(
|
|
115
|
+
o.push(A(s.fileId));
|
|
74
116
|
continue;
|
|
75
117
|
}
|
|
76
|
-
let
|
|
118
|
+
let t = e.path.split("/").pop() ?? e.path, c = r.get(e.path);
|
|
77
119
|
if (!c) {
|
|
78
|
-
o.push(
|
|
120
|
+
o.push(t);
|
|
79
121
|
continue;
|
|
80
122
|
}
|
|
81
123
|
a.push({
|
|
82
124
|
fileId: s.fileId,
|
|
83
125
|
bytes: c,
|
|
84
|
-
originalFileName:
|
|
85
|
-
allocated: i.allocate(
|
|
126
|
+
originalFileName: t,
|
|
127
|
+
allocated: i.allocate(t)
|
|
86
128
|
});
|
|
87
129
|
}
|
|
88
130
|
return {
|
|
@@ -91,4 +133,4 @@ var o = class extends Error {
|
|
|
91
133
|
};
|
|
92
134
|
};
|
|
93
135
|
//#endregion
|
|
94
|
-
export {
|
|
136
|
+
export { s as UnsupportedImportFormatError, w as formatQuotedNameList, C as getFolderBreadcrumb, u as parseImportEnvelope, j as planAttachmentUploads, S as rebaseConversationId, k as rewriteAttachmentUrls };
|
|
@@ -4,6 +4,7 @@ var i = (t, n, r, i) => i && n === r - 1 && t.role === e.Assistant, a = (e) => {
|
|
|
4
4
|
for (let t = e.length - 1; t >= 0; t--) {
|
|
5
5
|
let i = e[t];
|
|
6
6
|
if (r(i) && i.custom_content?.event_type === n.ModelChanged) return i.custom_content.new_deployment_id;
|
|
7
|
+
if (i.deploymentId) return i.deploymentId;
|
|
7
8
|
}
|
|
8
9
|
return null;
|
|
9
10
|
}, o = (t) => t.role === e.Assistant && (t.custom_content?.stages?.length ?? 0) > 0, s = (t) => {
|
|
@@ -3,9 +3,9 @@ import { getStarterPopulateText as e } from "../starter-option.js";
|
|
|
3
3
|
var t = (t, n) => {
|
|
4
4
|
let { populateText: r } = t["dial:widgetOptions"];
|
|
5
5
|
return r == null && n ? n : e(t);
|
|
6
|
-
}, n = (
|
|
7
|
-
let { populateText: r, submit: i } =
|
|
8
|
-
return i && r == null ? "" : n
|
|
9
|
-
};
|
|
6
|
+
}, n = (e, n) => {
|
|
7
|
+
let { populateText: r, submit: i } = e["dial:widgetOptions"];
|
|
8
|
+
return i && r == null ? "" : t(e, n);
|
|
9
|
+
}, r = (e, t) => n(e, t) || e.title;
|
|
10
10
|
//#endregion
|
|
11
|
-
export { t as getStarterConversationText, n as getStarterSubmitText };
|
|
11
|
+
export { t as getStarterConversationText, r as getStarterDisplayText, n as getStarterSubmitText };
|
|
@@ -2,49 +2,49 @@ import { useAttachmentUpload as e } from "../useAttachmentUpload/useAttachmentUp
|
|
|
2
2
|
import { attachmentsToDtos as t } from "./attachment-to-dto.js";
|
|
3
3
|
import { createMessagePair as n } from "./message-factory.js";
|
|
4
4
|
import { hasActiveToolConfig as r, shouldRerunGenerationOnEdit as i } from "./message-utils.js";
|
|
5
|
-
import {
|
|
6
|
-
import { getConversationPath as
|
|
7
|
-
import { MessageRole as
|
|
8
|
-
import { useCallback as
|
|
9
|
-
import { SendCompletionDtoModeEnum as
|
|
5
|
+
import { getStarterDisplayText as a, getStarterSubmitText as o } from "./starter-option.js";
|
|
6
|
+
import { getConversationPath as s } from "../useConversationStream/conversation-path.js";
|
|
7
|
+
import { MessageRole as c, generateUUID as l } from "@epam/ai-dial-chat-shared";
|
|
8
|
+
import { useCallback as u, useState as d } from "react";
|
|
9
|
+
import { SendCompletionDtoModeEnum as f } from "@epam/ai-dial-chat-api-client";
|
|
10
10
|
//#region src/conversation/useConversationHandlers/useConversationHandlers.ts
|
|
11
|
-
var
|
|
12
|
-
let [
|
|
13
|
-
filesApi:
|
|
14
|
-
bucket:
|
|
15
|
-
onNetworkError:
|
|
16
|
-
}),
|
|
17
|
-
if (!
|
|
18
|
-
let a = t(i), o = r(
|
|
11
|
+
var p = ({ conversation: p, conversationId: m, bucket: h, isStreaming: g, startStream: _, state: { setConversation: v, conversationRef: y }, filesApi: b, conversationsApi: x, rateApi: S, resolveModelId: C, onConversationDeleted: w, showNetworkError: T, toolConfigurationValue: E }) => {
|
|
12
|
+
let [D, O] = d(null), [k, A] = d(/* @__PURE__ */ new Set()), [j, M] = d(null), { handleUploadAttachment: N } = e({
|
|
13
|
+
filesApi: b,
|
|
14
|
+
bucket: h,
|
|
15
|
+
onNetworkError: T
|
|
16
|
+
}), P = u(async (e, i) => {
|
|
17
|
+
if (!m || !p) return;
|
|
18
|
+
let a = t(i), o = r(E), s = a?.length || o ? {
|
|
19
19
|
...a?.length ? { attachments: a } : {},
|
|
20
|
-
...o ? { configuration_value:
|
|
21
|
-
} : void 0,
|
|
22
|
-
|
|
20
|
+
...o ? { configuration_value: E } : {}
|
|
21
|
+
} : void 0, c = C(), { userMessage: u, assistantMessage: d } = n(e, s, c);
|
|
22
|
+
v((e) => {
|
|
23
23
|
if (!e) return e;
|
|
24
24
|
let t = {
|
|
25
25
|
...e,
|
|
26
26
|
messages: [
|
|
27
27
|
...e.messages,
|
|
28
28
|
u,
|
|
29
|
-
|
|
29
|
+
d
|
|
30
30
|
]
|
|
31
31
|
};
|
|
32
|
-
return
|
|
33
|
-
}),
|
|
32
|
+
return y.current = t, t;
|
|
33
|
+
}), _(m, e, p.messages.length + 1, c, s, l(), f.Append);
|
|
34
34
|
}, [
|
|
35
|
-
f,
|
|
36
35
|
p,
|
|
36
|
+
m,
|
|
37
|
+
y,
|
|
38
|
+
C,
|
|
37
39
|
v,
|
|
38
|
-
S,
|
|
39
40
|
_,
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
_((t) => {
|
|
41
|
+
E
|
|
42
|
+
]), F = u((e) => {
|
|
43
|
+
if (g || !m || !p || e === -1 || p.messages[e]?.role !== c.Assistant) return;
|
|
44
|
+
let t = p.messages[e - 1];
|
|
45
|
+
if (!t || t.role !== c.User) return;
|
|
46
|
+
let n = C();
|
|
47
|
+
v((t) => {
|
|
48
48
|
if (!t) return t;
|
|
49
49
|
let r = {
|
|
50
50
|
...t.messages[e],
|
|
@@ -58,76 +58,76 @@ var f = ({ conversation: f, conversationId: p, bucket: m, isStreaming: h, startS
|
|
|
58
58
|
...t,
|
|
59
59
|
messages: [...t.messages.slice(0, e), r]
|
|
60
60
|
};
|
|
61
|
-
return
|
|
62
|
-
}),
|
|
61
|
+
return y.current = i, i;
|
|
62
|
+
}), A((t) => new Set([...t].filter((t) => t < e))), _(m, t.content, e, n, t.custom_content, l(), f.Regenerate);
|
|
63
63
|
}, [
|
|
64
|
-
f,
|
|
65
64
|
p,
|
|
65
|
+
m,
|
|
66
|
+
y,
|
|
67
|
+
g,
|
|
68
|
+
C,
|
|
66
69
|
v,
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
let e = E;
|
|
76
|
-
D(null);
|
|
77
|
-
let t = v.current;
|
|
70
|
+
_
|
|
71
|
+
]), I = u((e) => {
|
|
72
|
+
g || O(e);
|
|
73
|
+
}, [g]), L = u(() => {
|
|
74
|
+
if (!m || D == null) return;
|
|
75
|
+
let e = D;
|
|
76
|
+
O(null);
|
|
77
|
+
let t = y.current;
|
|
78
78
|
if (!t || e === -1) return;
|
|
79
|
-
let n =
|
|
80
|
-
if (r.length === 0 || r.length === 1 && r[0].role ===
|
|
81
|
-
|
|
79
|
+
let n = s(m), r = t.messages[e + 1]?.role === c.Assistant ? t.messages.filter((t, n) => n !== e && n !== e + 1) : t.messages.filter((t, n) => n !== e);
|
|
80
|
+
if (r.length === 0 || r.length === 1 && r[0].role === c.Status) {
|
|
81
|
+
x.deleteConversation({ path: n }), w?.();
|
|
82
82
|
return;
|
|
83
83
|
}
|
|
84
84
|
let i = {
|
|
85
85
|
...t,
|
|
86
86
|
messages: r
|
|
87
87
|
};
|
|
88
|
-
|
|
88
|
+
y.current = i, v(i), x.saveConversation({
|
|
89
89
|
path: n,
|
|
90
90
|
saveConversationBodyDto: { conversation: i }
|
|
91
91
|
});
|
|
92
92
|
}, [
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
]),
|
|
100
|
-
if (!
|
|
101
|
-
let r =
|
|
93
|
+
m,
|
|
94
|
+
y,
|
|
95
|
+
x,
|
|
96
|
+
w,
|
|
97
|
+
D,
|
|
98
|
+
v
|
|
99
|
+
]), R = u(async (e, t, n) => {
|
|
100
|
+
if (!m || !p) return !1;
|
|
101
|
+
let r = p.messages[e];
|
|
102
102
|
if (!r) return !1;
|
|
103
103
|
let i = r.rating, a = {
|
|
104
|
-
...
|
|
105
|
-
messages:
|
|
104
|
+
...p,
|
|
105
|
+
messages: p.messages.map((n, r) => r === e ? {
|
|
106
106
|
...n,
|
|
107
107
|
rating: t ?? void 0
|
|
108
108
|
} : n)
|
|
109
109
|
};
|
|
110
|
-
|
|
111
|
-
let
|
|
112
|
-
|
|
110
|
+
v(() => (y.current = a, a));
|
|
111
|
+
let o = s(m), c = () => {
|
|
112
|
+
v((t) => t && {
|
|
113
113
|
...t,
|
|
114
114
|
messages: t.messages.map((t, n) => n === e ? {
|
|
115
115
|
...t,
|
|
116
116
|
rating: i
|
|
117
117
|
} : t)
|
|
118
118
|
});
|
|
119
|
-
}, l = () =>
|
|
120
|
-
path:
|
|
119
|
+
}, l = () => x.saveConversation({
|
|
120
|
+
path: o,
|
|
121
121
|
saveConversationBodyDto: { conversation: a }
|
|
122
122
|
});
|
|
123
123
|
if (t != null) {
|
|
124
124
|
let e = r.responseId;
|
|
125
125
|
if (!e) return c(), !1;
|
|
126
126
|
try {
|
|
127
|
-
return await
|
|
128
|
-
conversationId:
|
|
127
|
+
return await S.rateMessage({ rateMessageDto: {
|
|
128
|
+
conversationId: p.id,
|
|
129
129
|
responseId: e,
|
|
130
|
-
modelId:
|
|
130
|
+
modelId: p.model.id,
|
|
131
131
|
rate: t,
|
|
132
132
|
...n ? { comment: n } : {}
|
|
133
133
|
} }), await l(), !0;
|
|
@@ -140,124 +140,124 @@ var f = ({ conversation: f, conversationId: p, bucket: m, isStreaming: h, startS
|
|
|
140
140
|
return c(), !1;
|
|
141
141
|
}
|
|
142
142
|
}, [
|
|
143
|
-
f,
|
|
144
143
|
p,
|
|
145
|
-
|
|
146
|
-
|
|
144
|
+
m,
|
|
145
|
+
y,
|
|
147
146
|
x,
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
...u ? {
|
|
154
|
-
|
|
155
|
-
|
|
147
|
+
S,
|
|
148
|
+
v
|
|
149
|
+
]), z = u((e, t, i) => {
|
|
150
|
+
if (!m || !p) return;
|
|
151
|
+
let s = a(e, i), c = o(e, i), u = t ? { [t]: e.const } : void 0, d = r(E), h = u || d ? {
|
|
152
|
+
...u ? { form_value: u } : {},
|
|
153
|
+
...d ? { configuration_value: E } : {}
|
|
154
|
+
} : void 0, g = C(), { userMessage: b, assistantMessage: x } = n(s, h, g);
|
|
155
|
+
v((e) => {
|
|
156
156
|
if (!e) return e;
|
|
157
157
|
let t = {
|
|
158
158
|
...e,
|
|
159
159
|
messages: [
|
|
160
160
|
...e.messages,
|
|
161
|
-
|
|
162
|
-
|
|
161
|
+
b,
|
|
162
|
+
x
|
|
163
163
|
]
|
|
164
164
|
};
|
|
165
|
-
return
|
|
166
|
-
}),
|
|
165
|
+
return y.current = t, t;
|
|
166
|
+
}), _(m, c, p.messages.length + 1, g, h, l(), f.Append);
|
|
167
167
|
}, [
|
|
168
|
-
f,
|
|
169
168
|
p,
|
|
169
|
+
m,
|
|
170
|
+
y,
|
|
171
|
+
C,
|
|
170
172
|
v,
|
|
171
|
-
S,
|
|
172
173
|
_,
|
|
173
|
-
|
|
174
|
-
T
|
|
174
|
+
E
|
|
175
175
|
]);
|
|
176
176
|
return {
|
|
177
|
-
handleSend:
|
|
178
|
-
handleUploadAttachment:
|
|
179
|
-
handleRegenerateMessage:
|
|
180
|
-
handleDeleteMessage:
|
|
181
|
-
handleConfirmDelete:
|
|
182
|
-
handleRateMessage:
|
|
183
|
-
handleButtonSelect:
|
|
184
|
-
!
|
|
177
|
+
handleSend: P,
|
|
178
|
+
handleUploadAttachment: N,
|
|
179
|
+
handleRegenerateMessage: F,
|
|
180
|
+
handleDeleteMessage: I,
|
|
181
|
+
handleConfirmDelete: L,
|
|
182
|
+
handleRateMessage: R,
|
|
183
|
+
handleButtonSelect: u((e, t, n) => {
|
|
184
|
+
!m || !p || g || (e["dial:widgetOptions"].confirmationMessage ? M({
|
|
185
185
|
starter: e,
|
|
186
186
|
propertyKey: t,
|
|
187
187
|
description: n
|
|
188
|
-
}) :
|
|
188
|
+
}) : z(e, t, n));
|
|
189
189
|
}, [
|
|
190
|
-
f,
|
|
191
190
|
p,
|
|
192
|
-
|
|
193
|
-
|
|
191
|
+
m,
|
|
192
|
+
g,
|
|
193
|
+
z
|
|
194
194
|
]),
|
|
195
|
-
handleConfirmStarter:
|
|
196
|
-
if (!
|
|
197
|
-
let { starter: e, propertyKey: t, description: n } =
|
|
198
|
-
|
|
199
|
-
}, [
|
|
200
|
-
handleStartEdit:
|
|
201
|
-
|
|
195
|
+
handleConfirmStarter: u(() => {
|
|
196
|
+
if (!j) return;
|
|
197
|
+
let { starter: e, propertyKey: t, description: n } = j;
|
|
198
|
+
M(null), z(e, t, n);
|
|
199
|
+
}, [j, z]),
|
|
200
|
+
handleStartEdit: u((e) => {
|
|
201
|
+
A((t) => new Set([...t, e]));
|
|
202
202
|
}, []),
|
|
203
|
-
handleCancelEdit:
|
|
204
|
-
|
|
203
|
+
handleCancelEdit: u((e) => {
|
|
204
|
+
A((t) => {
|
|
205
205
|
let n = new Set(t);
|
|
206
206
|
return n.delete(e), n;
|
|
207
207
|
});
|
|
208
208
|
}, []),
|
|
209
|
-
handleEditMessage:
|
|
210
|
-
if (
|
|
209
|
+
handleEditMessage: u(async (e, n, r, a) => {
|
|
210
|
+
if (g || !m || !p) return;
|
|
211
211
|
let o = e;
|
|
212
|
-
if (o === -1 ||
|
|
213
|
-
let
|
|
214
|
-
if (!i(
|
|
215
|
-
|
|
212
|
+
if (o === -1 || p.messages[o].role !== c.User) return;
|
|
213
|
+
let s = p.messages[o];
|
|
214
|
+
if (!i(p.messages, o, n, r, a)) {
|
|
215
|
+
A((e) => {
|
|
216
216
|
let t = new Set(e);
|
|
217
217
|
return t.delete(o), t;
|
|
218
218
|
});
|
|
219
219
|
return;
|
|
220
220
|
}
|
|
221
|
-
let u = t(a),
|
|
221
|
+
let u = t(a), d = new Set(r.map((e) => e.id)), h = [...(s.custom_content?.attachments ?? []).filter((e) => {
|
|
222
222
|
let t = e.url ?? e.data ?? e.title;
|
|
223
|
-
return
|
|
224
|
-
}), ...u ?? []], { attachments: b, ...x } =
|
|
223
|
+
return d.has(t);
|
|
224
|
+
}), ...u ?? []], { attachments: b, ...x } = s.custom_content ?? {}, S = h.length > 0 ? {
|
|
225
225
|
...x,
|
|
226
|
-
attachments:
|
|
226
|
+
attachments: h
|
|
227
227
|
} : Object.keys(x).length > 0 ? x : void 0, w = {
|
|
228
|
-
...
|
|
228
|
+
...s,
|
|
229
229
|
content: n,
|
|
230
|
-
custom_content:
|
|
230
|
+
custom_content: S
|
|
231
231
|
}, T = Date.now(), E = {
|
|
232
|
-
role:
|
|
232
|
+
role: c.Assistant,
|
|
233
233
|
content: "",
|
|
234
234
|
timestamp: new Date(T).toISOString()
|
|
235
235
|
}, D = [
|
|
236
|
-
...
|
|
236
|
+
...p.messages.slice(0, o),
|
|
237
237
|
w,
|
|
238
238
|
E
|
|
239
239
|
], O = {
|
|
240
|
-
...
|
|
240
|
+
...p,
|
|
241
241
|
messages: D
|
|
242
242
|
};
|
|
243
|
-
|
|
244
|
-
let
|
|
245
|
-
|
|
243
|
+
y.current = O, v(O);
|
|
244
|
+
let k = C();
|
|
245
|
+
_(m, n, D.length - 1, k, S, l(), f.Edit), A(/* @__PURE__ */ new Set());
|
|
246
246
|
}, [
|
|
247
|
-
f,
|
|
248
247
|
p,
|
|
248
|
+
m,
|
|
249
|
+
y,
|
|
250
|
+
g,
|
|
251
|
+
C,
|
|
249
252
|
v,
|
|
250
|
-
|
|
251
|
-
S,
|
|
252
|
-
_,
|
|
253
|
-
g
|
|
253
|
+
_
|
|
254
254
|
]),
|
|
255
|
-
editingMessageIndexes:
|
|
256
|
-
pendingDeleteIndex:
|
|
257
|
-
setPendingDeleteIndex:
|
|
258
|
-
pendingStarterContext:
|
|
259
|
-
setPendingStarterContext:
|
|
255
|
+
editingMessageIndexes: k,
|
|
256
|
+
pendingDeleteIndex: D,
|
|
257
|
+
setPendingDeleteIndex: O,
|
|
258
|
+
pendingStarterContext: j,
|
|
259
|
+
setPendingStarterContext: M
|
|
260
260
|
};
|
|
261
261
|
};
|
|
262
262
|
//#endregion
|
|
263
|
-
export {
|
|
263
|
+
export { p as useConversationHandlers };
|
package/conversation.d.ts
CHANGED
|
@@ -359,8 +359,18 @@ export declare const getConversationPath: (conversationId: string) => string;
|
|
|
359
359
|
export declare const getConversationSource: (item: Pick<ConversationListItemDto, "sharedWithMe" | "publishedWithMe">) => FilterTab;
|
|
360
360
|
|
|
361
361
|
/**
|
|
362
|
-
* Returns the
|
|
363
|
-
*
|
|
362
|
+
* Returns the deployment the conversation was last running on: scanning
|
|
363
|
+
* backwards, the `new_deployment_id` of a `model_changed` status message or
|
|
364
|
+
* the `deploymentId` a message carries in its own right, whichever comes
|
|
365
|
+
* later. `null` when neither is present.
|
|
366
|
+
*
|
|
367
|
+
* Reading only the status messages loses the switch whenever a regenerate or
|
|
368
|
+
* an edit truncates past one: the marker is appended at the end of the
|
|
369
|
+
* timeline, so truncating at an earlier message drops it, and the model the
|
|
370
|
+
* user picked reverted on the next page load even though the answer had been
|
|
371
|
+
* regenerated on it (issue #8712). The assistant message the backend writes
|
|
372
|
+
* carries the deployment that produced it, which survives that truncation
|
|
373
|
+
* because it *is* the regenerated message.
|
|
364
374
|
*/
|
|
365
375
|
export declare const getLastDeploymentId: (messages: Message[]) => string | null;
|
|
366
376
|
|
|
@@ -409,6 +419,13 @@ export declare const getQuickAppConversationStarters: (conversationStarters: unk
|
|
|
409
419
|
*/
|
|
410
420
|
export declare const getStarterConversationText: (starter: StarterOption, description?: string) => string;
|
|
411
421
|
|
|
422
|
+
/**
|
|
423
|
+
* Returns the text shown in the user's message bubble for a selected
|
|
424
|
+
* starter/form button. Falls back to the button label for submit buttons that
|
|
425
|
+
* send no text of their own.
|
|
426
|
+
*/
|
|
427
|
+
export declare const getStarterDisplayText: (starter: StarterOption, description?: string) => string;
|
|
428
|
+
|
|
412
429
|
/**
|
|
413
430
|
* Returns the text to populate in the input when a starter button is selected.
|
|
414
431
|
* Falls back to the button title if `populateText` is empty.
|
|
@@ -433,6 +450,10 @@ export declare const getStartersFromSchema: (schema: DeploymentConfigurationSche
|
|
|
433
450
|
/**
|
|
434
451
|
* Returns submitted text for DIAL starter/form buttons.
|
|
435
452
|
* For submit buttons, `populateText: null` explicitly means "submit no text".
|
|
453
|
+
* `description` (the schema property's shared intro/question text) is used only
|
|
454
|
+
* as a fallback when the starter carries no text of its own — it must never
|
|
455
|
+
* override a starter's own configured prompt, or every button in a group would
|
|
456
|
+
* submit the same message.
|
|
436
457
|
*/
|
|
437
458
|
export declare const getStarterSubmitText: (starter: StarterOption, description?: string) => string;
|
|
438
459
|
|
package/conversation.js
CHANGED
|
@@ -21,11 +21,11 @@ import { useTranscribeAudio as N } from "./conversation/useTranscribeAudio/useTr
|
|
|
21
21
|
import { attachmentToDto as P, attachmentsToDtos as F } from "./conversation/useConversationHandlers/attachment-to-dto.js";
|
|
22
22
|
import { createMessagePair as I } from "./conversation/useConversationHandlers/message-factory.js";
|
|
23
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,
|
|
25
|
-
import { getConversationPath as
|
|
26
|
-
import { useConversationHandlers as
|
|
27
|
-
import { isAwaitingGenerationResume as
|
|
28
|
-
import { useConversationStream as
|
|
29
|
-
import { useChatSettingsFormConfig as
|
|
30
|
-
import { useToolsMenu as
|
|
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,
|
|
24
|
+
import { getStarterConversationText as V, getStarterDisplayText as H, getStarterSubmitText as U } from "./conversation/useConversationHandlers/starter-option.js";
|
|
25
|
+
import { getConversationPath as W } from "./conversation/useConversationStream/conversation-path.js";
|
|
26
|
+
import { useConversationHandlers as G } from "./conversation/useConversationHandlers/useConversationHandlers.js";
|
|
27
|
+
import { isAwaitingGenerationResume as K } from "./conversation/useConversationStream/generation-resume.js";
|
|
28
|
+
import { useConversationStream as q } from "./conversation/useConversationStream/useConversationStream.js";
|
|
29
|
+
import { useChatSettingsFormConfig as J } from "./useChatSettingsFormConfig/useChatSettingsFormConfig.js";
|
|
30
|
+
import { useToolsMenu as Y } 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, W as getConversationPath, D as getConversationSource, m as getLastDeploymentId, h as getLastUserMessageToolConfiguration, d as getModelIdFromConversationId, b as getQuickAppConversationStarters, V as getStarterConversationText, H as getStarterDisplayText, x as getStarterPopulateText, U as getStarterSubmitText, S as getStartersFromSchema, f as getTimeOfDayGreeting, L as hasActiveToolConfig, t as hasAnnouncementContent, n as hasStructuredAnnouncement, R as isAnswerIncomplete, K 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, J as useChatSettingsFormConfig, G as useConversationHandlers, E as useConversationLookupMaps, O as useConversationPanelItems, q as useConversationStream, k as useImportFilePicker, Y as useToolsMenu, N as useTranscribeAudio };
|
package/index.d.ts
CHANGED
|
@@ -1659,8 +1659,18 @@ export declare const getConversationSource: (item: Pick<ConversationListItemDto,
|
|
|
1659
1659
|
export declare const getExternalServiceFallbackName: (serviceName: string) => string;
|
|
1660
1660
|
|
|
1661
1661
|
/**
|
|
1662
|
-
* Returns the
|
|
1663
|
-
*
|
|
1662
|
+
* Returns the deployment the conversation was last running on: scanning
|
|
1663
|
+
* backwards, the `new_deployment_id` of a `model_changed` status message or
|
|
1664
|
+
* the `deploymentId` a message carries in its own right, whichever comes
|
|
1665
|
+
* later. `null` when neither is present.
|
|
1666
|
+
*
|
|
1667
|
+
* Reading only the status messages loses the switch whenever a regenerate or
|
|
1668
|
+
* an edit truncates past one: the marker is appended at the end of the
|
|
1669
|
+
* timeline, so truncating at an earlier message drops it, and the model the
|
|
1670
|
+
* user picked reverted on the next page load even though the answer had been
|
|
1671
|
+
* regenerated on it (issue #8712). The assistant message the backend writes
|
|
1672
|
+
* carries the deployment that produced it, which survives that truncation
|
|
1673
|
+
* because it *is* the regenerated message.
|
|
1664
1674
|
*/
|
|
1665
1675
|
export declare const getLastDeploymentId: (messages: Message[]) => string | null;
|
|
1666
1676
|
|
|
@@ -1726,6 +1736,13 @@ export declare const getRemainingCharacters: (value: string, maxLength: number)
|
|
|
1726
1736
|
*/
|
|
1727
1737
|
export declare const getStarterConversationText: (starter: StarterOption, description?: string) => string;
|
|
1728
1738
|
|
|
1739
|
+
/**
|
|
1740
|
+
* Returns the text shown in the user's message bubble for a selected
|
|
1741
|
+
* starter/form button. Falls back to the button label for submit buttons that
|
|
1742
|
+
* send no text of their own.
|
|
1743
|
+
*/
|
|
1744
|
+
export declare const getStarterDisplayText: (starter: StarterOption, description?: string) => string;
|
|
1745
|
+
|
|
1729
1746
|
/**
|
|
1730
1747
|
* Returns the text to populate in the input when a starter button is selected.
|
|
1731
1748
|
* Falls back to the button title if `populateText` is empty.
|
|
@@ -1750,6 +1767,10 @@ export declare const getStartersFromSchema: (schema: DeploymentConfigurationSche
|
|
|
1750
1767
|
/**
|
|
1751
1768
|
* Returns submitted text for DIAL starter/form buttons.
|
|
1752
1769
|
* For submit buttons, `populateText: null` explicitly means "submit no text".
|
|
1770
|
+
* `description` (the schema property's shared intro/question text) is used only
|
|
1771
|
+
* as a fallback when the starter carries no text of its own — it must never
|
|
1772
|
+
* override a starter's own configured prompt, or every button in a group would
|
|
1773
|
+
* submit the same message.
|
|
1753
1774
|
*/
|
|
1754
1775
|
export declare const getStarterSubmitText: (starter: StarterOption, description?: string) => string;
|
|
1755
1776
|
|
package/index.js
CHANGED
|
@@ -84,53 +84,53 @@ import { DEFAULT_MAX_ARCHIVE_BYTES as qn, useConversationExport as Jn } from "./
|
|
|
84
84
|
import { attachmentToDto as Yn, attachmentsToDtos as Xn } from "./conversation/useConversationHandlers/attachment-to-dto.js";
|
|
85
85
|
import { createMessagePair as Zn } from "./conversation/useConversationHandlers/message-factory.js";
|
|
86
86
|
import { hasActiveToolConfig as Qn, isAnswerIncomplete as $n, isMessageChanged as er, shouldRerunGenerationOnEdit as tr } from "./conversation/useConversationHandlers/message-utils.js";
|
|
87
|
-
import { getStarterConversationText as nr,
|
|
88
|
-
import { getConversationPath as
|
|
89
|
-
import { useConversationHandlers as
|
|
90
|
-
import { useConversationImport as
|
|
91
|
-
import { useConversationScroll as
|
|
92
|
-
import { isAwaitingGenerationResume as
|
|
93
|
-
import { useConversationStream as
|
|
94
|
-
import { useConversationSources as
|
|
95
|
-
import { DialFilesApiUploadMode as
|
|
96
|
-
import { FileManagerNotificationReason as
|
|
97
|
-
import { COLUMNS_WITHOUT_AUTHOR as
|
|
98
|
-
import { DialFileManagerActionProfile as
|
|
99
|
-
import { buildSharedItemVirtualPath as
|
|
100
|
-
import { getParentFolderPath as
|
|
101
|
-
import { prepareCopyItems as
|
|
102
|
-
import { buildFromCache as
|
|
103
|
-
import { createFilesApiClient as
|
|
104
|
-
import { createUploadFileWithProgress as
|
|
105
|
-
import { openAnnotationAttachment as
|
|
106
|
-
import { annotationToOoxmlCanvasContent as
|
|
107
|
-
import { getUrlFileName as
|
|
108
|
-
import { annotationToDisplayAttachment as
|
|
109
|
-
import { dialFileToAttachment as
|
|
110
|
-
import { DownloadDestinationType as
|
|
111
|
-
import { prepareDownloadDestination as
|
|
112
|
-
import { useDialFileListing as
|
|
113
|
-
import { useDialFileMetadata as
|
|
114
|
-
import { useDialFileMutations as
|
|
115
|
-
import { useDialFileSharing as
|
|
116
|
-
import { useDialFileUploadBatch as
|
|
117
|
-
import { useDialFileManager as
|
|
118
|
-
import { useDialFileManagerTabConfig as
|
|
119
|
-
import { isCustomAppSchema as
|
|
120
|
-
import { getBrowserTimezone as
|
|
121
|
-
import { isValidAbsoluteUrl as
|
|
122
|
-
import { buildExternalServiceScopeId as
|
|
123
|
-
import { useChatSettingsFormConfig as
|
|
124
|
-
import { usePageFileDrag as
|
|
125
|
-
import { useViewportWidth as
|
|
126
|
-
import { usePanelMaxWidth as
|
|
127
|
-
import { useShareLink as
|
|
128
|
-
import { useToolsMenu as
|
|
129
|
-
import { useUsageData as
|
|
130
|
-
import { McpAppResourceFetchError as
|
|
131
|
-
import { useMcpAppTools as
|
|
132
|
-
import { useMcpAppHostContext as
|
|
133
|
-
import { useMcpAppHostAdapter as
|
|
134
|
-
import { useOpenMcpAppCanvas as
|
|
135
|
-
import { useGridEditingScroll as
|
|
136
|
-
export { b as AttachmentValidationErrorReason, Wn as AudioTranscriptionError, Gn as AudioTranscriptionErrorReason, L as AuthenticationType,
|
|
87
|
+
import { getStarterConversationText as nr, getStarterDisplayText as rr, getStarterSubmitText as ir } from "./conversation/useConversationHandlers/starter-option.js";
|
|
88
|
+
import { getConversationPath as ar } from "./conversation/useConversationStream/conversation-path.js";
|
|
89
|
+
import { useConversationHandlers as or } from "./conversation/useConversationHandlers/useConversationHandlers.js";
|
|
90
|
+
import { useConversationImport as sr } from "./conversation/useConversationImport/useConversationImport.js";
|
|
91
|
+
import { useConversationScroll as cr } from "./conversation/useConversationScroll/useConversationScroll.js";
|
|
92
|
+
import { isAwaitingGenerationResume as lr } from "./conversation/useConversationStream/generation-resume.js";
|
|
93
|
+
import { useConversationStream as ur } from "./conversation/useConversationStream/useConversationStream.js";
|
|
94
|
+
import { useConversationSources as dr } from "./conversation-sources/useConversationSources/useConversationSources.js";
|
|
95
|
+
import { DialFilesApiUploadMode as fr } from "./files/dial-files-api.js";
|
|
96
|
+
import { FileManagerNotificationReason as pr, FileNameValidationErrorReason as mr, FileOperationKind as hr } from "./files/dial-file-manager.types.js";
|
|
97
|
+
import { COLUMNS_WITHOUT_AUTHOR as gr, COLUMNS_WITH_AUTHOR as _r, CORE_PERMISSION_MAP as vr, DATE_OPTIONS as yr, PATH_SEPARATOR_REGEXP as br, RESERVED_MARKER_NAME as xr, UPLOAD_CONCURRENCY as Sr } from "./files/dial-file-manager.model.js";
|
|
98
|
+
import { DialFileManagerActionProfile as Cr, DialFileManagerVariant as wr, deriveActionProfile as Tr } from "./files/file-manager-variant.js";
|
|
99
|
+
import { buildSharedItemVirtualPath as Er, dialCorePathToRelative as Dr, findDialFileByPath as Or, findFolderByVirtualPath as kr, formatOperationFolderName as Ar, getVirtualPathName as jr, hasDialFileWritePermission as Mr, hasForbiddenNameSymbols as Nr, isCopyMoveDuplicateAllowed as Pr, isShareActionsAllowed as Fr, normalizeVirtualPath as Ir, parseNewFolderVirtualPath as Lr, resolveOwnerCoords as Rr } from "./files/dial-file-manager-path.util.js";
|
|
100
|
+
import { getParentFolderPath as zr, resolveDialFileApiPath as Br, virtualPathToApiPath as Vr } from "./files/resolve-dial-file-api-path.js";
|
|
101
|
+
import { prepareCopyItems as Hr, prepareMoveRenameItems as Ur } from "./files/dial-file-manager-copy-move.util.js";
|
|
102
|
+
import { buildFromCache as Wr, fetchByTab as Gr, fetchForSearch as Kr, findFirstSuccessfulCopyMoveItem as qr, mapCorePermissions as Jr, mapFileMetadataToDialFile as Yr, mapSearchItem as Xr, mergeCreatedFolderIntoCache as Zr, updateEntry as Qr } from "./files/dial-file-manager-mapping.util.js";
|
|
103
|
+
import { createFilesApiClient as $r } from "./files/create-files-api.js";
|
|
104
|
+
import { createUploadFileWithProgress as ei } from "./files/create-upload-file-with-progress.js";
|
|
105
|
+
import { openAnnotationAttachment as ti } from "./files/annotation.js";
|
|
106
|
+
import { annotationToOoxmlCanvasContent as ni, annotationToPdfCanvasContent as ri, clearAttachmentCache as ii, hasAttachmentTextSource as ai, referenceAttachmentToPdfCanvasContent as oi, resolveCodeCanvasContent as si, resolveHtmlCanvasContent as ci, resolveImageCanvasContent as li, resolveJsonCanvasContent as ui, resolveMarkdownCanvasContent as di, resolveOoxmlCanvasContent as fi, resolvePdfCanvasContent as pi, resolveTextCanvasContent as mi, resolveVisualizerCanvasContent as hi } from "./files/attachment-canvas.js";
|
|
107
|
+
import { getUrlFileName as gi, isExternalSourcePreviewable as _i, resolveExternalSourceContentType as vi } from "./files/source-content.js";
|
|
108
|
+
import { annotationToDisplayAttachment as yi, attachmentDtoToDisplayAttachment as bi, attachmentDtosToDisplayAttachments as xi } from "./files/attachment-dto-to-display.js";
|
|
109
|
+
import { dialFileToAttachment as Si, dialFilesToAttachments as Ci, dialFolderPathToAttachment as wi } from "./files/dial-file-to-attachment.js";
|
|
110
|
+
import { DownloadDestinationType as Ti } from "./files/download-destination.js";
|
|
111
|
+
import { prepareDownloadDestination as Ei } from "./files/prepare-download-destination.js";
|
|
112
|
+
import { useDialFileListing as Di } from "./files/useDialFileListing/useDialFileListing.js";
|
|
113
|
+
import { useDialFileMetadata as Oi } from "./files/useDialFileMetadata/useDialFileMetadata.js";
|
|
114
|
+
import { useDialFileMutations as ki } from "./files/useDialFileMutations/useDialFileMutations.js";
|
|
115
|
+
import { useDialFileSharing as Ai } from "./files/useDialFileSharing/useDialFileSharing.js";
|
|
116
|
+
import { useDialFileUploadBatch as ji } from "./files/useDialFileUploadBatch/useDialFileUploadBatch.js";
|
|
117
|
+
import { useDialFileManager as Mi } from "./files/useDialFileManager/useDialFileManager.js";
|
|
118
|
+
import { useDialFileManagerTabConfig as Ni } from "./files/useDialFileManagerTabConfig/useDialFileManagerTabConfig.js";
|
|
119
|
+
import { isCustomAppSchema as Pi, isQuickAppSchema as Fi } from "./shared/application-schema.js";
|
|
120
|
+
import { getBrowserTimezone as Ii } from "./shared/browser-timezone.js";
|
|
121
|
+
import { isValidAbsoluteUrl as Li, isValidFeaturesData as Ri, parseFeaturesData as zi } from "./shared/custom-apps.js";
|
|
122
|
+
import { buildExternalServiceScopeId as Bi, getExternalServiceFallbackName as Vi, parseExternalServiceUrl as Hi } from "./shared/external-services.js";
|
|
123
|
+
import { useChatSettingsFormConfig as Ui } from "./useChatSettingsFormConfig/useChatSettingsFormConfig.js";
|
|
124
|
+
import { usePageFileDrag as Wi } from "./usePageFileDrag/usePageFileDrag.js";
|
|
125
|
+
import { useViewportWidth as Gi } from "./useViewportWidth/useViewportWidth.js";
|
|
126
|
+
import { usePanelMaxWidth as Ki } from "./usePanelMaxWidth/usePanelMaxWidth.js";
|
|
127
|
+
import { useShareLink as qi } from "./useShareLink/useShareLink.js";
|
|
128
|
+
import { useToolsMenu as Ji } from "./useToolsMenu/useToolsMenu.js";
|
|
129
|
+
import { useUsageData as Yi } from "./usage/useUsageData/useUsageData.js";
|
|
130
|
+
import { McpAppResourceFetchError as Xi, createMcpAppsApiClient as Zi } from "./mcp-apps/mcp-apps-api-client.js";
|
|
131
|
+
import { useMcpAppTools as Qi } from "./mcp-apps/useMcpAppTools/useMcpAppTools.js";
|
|
132
|
+
import { useMcpAppHostContext as $i } from "./mcp-apps/useMcpAppHostContext/useMcpAppHostContext.js";
|
|
133
|
+
import { useMcpAppHostAdapter as ea } from "./mcp-apps/useMcpAppHostAdapter/useMcpAppHostAdapter.js";
|
|
134
|
+
import { useOpenMcpAppCanvas as ta } from "./mcp-apps/useOpenMcpAppCanvas/useOpenMcpAppCanvas.js";
|
|
135
|
+
import { useGridEditingScroll as na } from "@epam/ai-dial-chat-shared";
|
|
136
|
+
export { b as AttachmentValidationErrorReason, Wn as AudioTranscriptionError, Gn as AudioTranscriptionErrorReason, L as AuthenticationType, gr as COLUMNS_WITHOUT_AUTHOR, _r as COLUMNS_WITH_AUTHOR, vr as CORE_PERMISSION_MAP, Ze as CatalogPrimaryActionType, w as ConversationExportMode, T as ConversationTransferErrorCode, E as ConversationTransferWarningCode, yr as DATE_OPTIONS, It as DEFAULT_GENERATION_CONFLICT_MESSAGE, qn as DEFAULT_MAX_ARCHIVE_BYTES, Cr as DialFileManagerActionProfile, wr as DialFileManagerVariant, fr as DialFilesApiUploadMode, Ti as DownloadDestinationType, O as EXPORT_APP_NAME, D as ExportFileNameKind, Ot as FavoriteEntityType, pr as FileManagerNotificationReason, mr as FileNameValidationErrorReason, hr as FileOperationKind, Lt as GenerationConflictError, Xi as McpAppResourceFetchError, Ie as McpResourceKind, it as OAuthResourceKind, br 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, xr 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, Sr as UPLOAD_CONCURRENCY, gn as UnsupportedTriggerReason, mt as WithLogin, yi as annotationToDisplayAttachment, ni as annotationToOoxmlCanvasContent, ri as annotationToPdfCanvasContent, _n as apSchedulerDayToJsDay, U as appendLocaleCode, bi as attachmentDtoToDisplayAttachment, xi as attachmentDtosToDisplayAttachments, Yn as attachmentToDto, Xn as attachmentsToDtos, W as buildAdditionalLocaleOptions, jt as buildAnnouncementSignature, Le as buildApplicationMcpUrl, M as buildChatCompletionsUrl, Re as buildConnectApi, N as buildDeploymentConnectApi, Bi as buildExternalServiceScopeId, Wr as buildFromCache, tn as buildPromptExportEnvelope, nn as buildPromptExportFileName, oe as buildPromptOverview, un as buildPromptPath, P as buildResponsesUrl, Er 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, ii as clearAttachmentCache, G as composeLocalePayload, Rt as createChatStreamApi, i as createCsrfMiddleware, Wt as createDeploymentChangedMessage, $r as createFilesApiClient, Zi as createMcpAppsApiClient, Zn as createMessagePair, A as createPublishApiClient, a as createUnauthorizedMiddleware, ei as createUploadFileWithProgress, B as decodeToolsetId, K as decomposeLocalizedFields, Tr as deriveActionProfile, Ke as deriveAvailableTabIds, Nn as deriveConversationRowActionState, qe as deriveFavoriteItems, Dr as dialCorePathToRelative, Si as dialFileToAttachment, Ci as dialFilesToAttachments, wi as dialFolderPathToAttachment, p as downloadAttachment, ht as emitToolsetLoginSuccess, F as encodeDeploymentId, V as encodeToolsetId, Gr as fetchByTab, Kr as fetchForSearch, tt as fetchSkillDescription, Je as filterCatalogItemsBySelector, Ye as filterHiddenOwnedItems, I as findDeploymentByIdOrReference, Or as findDialFileByPath, qr as findFirstSuccessfulCopyMoveItem, kr as findFolderByVirtualPath, Bt as formatAppVersion, Y as formatCalendarDate, S as formatDateYM, C as formatDateYMD, Ar as formatOperationFolderName, k as formatQuotedNameList, e as getApiErrorDetails, t as getApiErrorMessage, n as getApiErrorStatus, Ii as getBrowserTimezone, ar as getConversationPath, Ln as getConversationSource, Vi as getExternalServiceFallbackName, Gt as getLastDeploymentId, Kt as getLastUserMessageToolConfiguration, Ht as getModelIdFromConversationId, zr as getParentFolderPath, Ve as getPublicCatalogEntityFolderPath, Zt as getQuickAppConversationStarters, dn as getRemainingCharacters, nr as getStarterConversationText, rr as getStarterDisplayText, Qt as getStarterPopulateText, ir as getStarterSubmitText, $t as getStartersFromSchema, Ut as getTimeOfDayGreeting, _t as getToolsetOAuthChannelName, bt as getToolsetRedirectUri, gi as getUrlFileName, jr as getVirtualPathName, Qn as hasActiveToolConfig, Mt as hasAnnouncementContent, ai as hasAttachmentTextSource, Mr as hasDialFileWritePermission, Nr as hasForbiddenNameSymbols, Nt as hasStructuredAnnouncement, o as includesIgnoreCase, xt as initiateOAuthLogin, $n as isAnswerIncomplete, lr as isAwaitingGenerationResume, r as isConversationNotFoundError, Pr as isCopyMoveDuplicateAllowed, Pi as isCustomAppSchema, g as isDialFileAcceptType, u as isDialFileId, m as isDownloadableAttachment, _i as isExternalSourcePreviewable, er as isMessageChanged, qt as isMessageStreaming, se as isOrganisationPromptItem, He as isPublicCatalogEntityId, H as isPublicToolsetId, Fi as isQuickAppSchema, Fr as isShareActionsAllowed, Li as isValidAbsoluteUrl, Ri as isValidFeaturesData, _e as isValidSkillRelativePath, vn as jsDayToApSchedulerDay, Jr as mapCorePermissions, Z as mapDeploymentDetailsDtoToEntityDetails, R as mapDeploymentLimitsDtoToCatalogLimits, z as mapDeploymentLimitsToInput, ee as mapDeploymentToCatalogItem, te as mapDeploymentToolsetCredentials, Q as mapEntityDetailsToCatalogDetails, Yr as mapFileMetadataToDialFile, yn as mapFormValuesToCreateBody, bn as mapFormValuesToUpdateBody, ce as mapPromptToCatalogItem, Ue as mapPublishConversationResultDto, We as mapPublishHistoryEntryDto, xn as mapScheduledTaskDtoToFormValues, Xr as mapSearchItem, je as mapSkillToCatalogItem, $ as mapToolsetCredentials, ne as mapToolsetToCatalogItem, Zr 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, Ir as normalizeVirtualPath, ti as openAnnotationAttachment, Ct as openToolsetOAuthPopup, X as padTwoDigits, Hi as parseExternalServiceUrl, zi as parseFeaturesData, Lr as parseNewFolderVirtualPath, ae as parsePromptResourceUrl, be as parseSkillManifest, et as parseSkillManifestDocument, Oe as parseSkillResourceUrl, Hr as prepareCopyItems, Ei as prepareDownloadDestination, Ur as prepareMoveRenameItems, Me as readSkillFileBytes, Ne as readSkillManifest, Xe as reconcileFilterTopics, oi as referenceAttachmentToPdfCanvasContent, Qe as resolveCatalogPrimaryAction, si as resolveCodeCanvasContent, re as resolveDeploymentFolder, Br as resolveDialFileApiPath, d as resolveDialFileBucketAndPath, vi as resolveExternalSourceContentType, ci as resolveHtmlCanvasContent, li as resolveImageCanvasContent, ui as resolveJsonCanvasContent, q as resolveLocalizedText, di as resolveMarkdownCanvasContent, Be as resolveMcpResourceKind, fi as resolveOoxmlCanvasContent, Rr as resolveOwnerCoords, pi as resolvePdfCanvasContent, f as resolveRelativeDialFilePath, Pe as resolveSkillFileDownloadPath, Fe as resolveSkillManifestFileId, mi as resolveTextCanvasContent, hi as resolveVisualizerCanvasContent, s as safeDecodeURI, c as safeDecodeURIComponent, Pt as sanitizeAnnouncementHtml, Ft as sanitizeAnnouncementMessageHtml, Bn as sanitizeFileName, Vt as sanitizeFooterHtml, rn as serializePromptExport, tr as shouldRerunGenerationOnEdit, zt as shouldWatchForDisplayNameUpdate, xe as skillFileBytesToBlob, Cn as skillFileToAttachment, Vn as splitFileNameExtension, l as stripSurroundingSlashes, gt as subscribeToolsetLoginSuccess, J as toBaseLocale, Xt as toOverlayMessages, Ge as toPublishEntityType, j as toPublishRuleDto, Hn as trimFileNameToByteLimit, Se as unpackSkillArchive, Qr as updateEntry, Pn as useActiveConversationSync, Fn as useAsyncConfirmDialog, h as useAttachmentAction, Un as useAttachmentUpload, x as useAttachmentValidation, $e as useCatalogEditNavigation, rt as useCatalogItemDetails, Et as useCatalogToolsetCredentials, Ui as useChatSettingsFormConfig, Jn as useConversationExport, or as useConversationHandlers, sr as useConversationImport, In as useConversationLookupMaps, Rn as useConversationPanelItems, cr as useConversationScroll, dr as useConversationSources, ur as useConversationStream, Di as useDialFileListing, Mi as useDialFileManager, Ni as useDialFileManagerTabConfig, Oi as useDialFileMetadata, ki as useDialFileMutations, Ai as useDialFileSharing, ji as useDialFileUploadBatch, kt as useFavoriteEntitiesState, na as useGridEditingScroll, zn as useImportFilePicker, ea as useMcpAppHostAdapter, $i as useMcpAppHostContext, Qi as useMcpAppTools, en as useOAuthCallbackCompletion, ta as useOpenMcpAppCanvas, Wi as usePageFileDrag, Ki as usePanelMaxWidth, hn as usePromptsState, At as usePublishFolders, qi 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, Ji as useToolsMenu, Tt as useToolsetLogin, Kn as useTranscribeAudio, Yi as useUsageData, Gi as useViewportWidth, fn as validatePromptContent, pn as validatePromptDescription, mn as validatePromptName, Sn as validateSkillFileBatch, Vr 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.
|
|
4
|
+
"version": "1.1.0-dev.444",
|
|
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.
|
|
108
|
-
"@epam/ai-dial-attachment-input": "1.1.0-dev.
|
|
109
|
-
"@epam/ai-dial-catalog": "1.1.0-dev.
|
|
110
|
-
"@epam/ai-dial-chat-api-client": "1.1.0-dev.
|
|
111
|
-
"@epam/ai-dial-chat-overlay": "1.1.0-dev.
|
|
112
|
-
"@epam/ai-dial-chat-shared": "1.1.0-dev.
|
|
113
|
-
"@epam/ai-dial-deployment-creation-form": "1.1.0-dev.
|
|
114
|
-
"@epam/ai-dial-mcp-apps": "1.1.0-dev.
|
|
115
|
-
"@epam/ai-dial-publish-panel": "1.1.0-dev.
|
|
116
|
-
"@epam/ai-dial-quotations": "1.1.0-dev.
|
|
107
|
+
"@epam/ai-dial-attachment-canvas": "1.1.0-dev.444",
|
|
108
|
+
"@epam/ai-dial-attachment-input": "1.1.0-dev.444",
|
|
109
|
+
"@epam/ai-dial-catalog": "1.1.0-dev.444",
|
|
110
|
+
"@epam/ai-dial-chat-api-client": "1.1.0-dev.444",
|
|
111
|
+
"@epam/ai-dial-chat-overlay": "1.1.0-dev.444",
|
|
112
|
+
"@epam/ai-dial-chat-shared": "1.1.0-dev.444",
|
|
113
|
+
"@epam/ai-dial-deployment-creation-form": "1.1.0-dev.444",
|
|
114
|
+
"@epam/ai-dial-mcp-apps": "1.1.0-dev.444",
|
|
115
|
+
"@epam/ai-dial-publish-panel": "1.1.0-dev.444",
|
|
116
|
+
"@epam/ai-dial-quotations": "1.1.0-dev.444",
|
|
117
117
|
"@epam/ai-dial-react-file-manager": "*",
|
|
118
|
-
"@epam/ai-dial-scheduled-tasks": "1.1.0-dev.
|
|
119
|
-
"@epam/ai-dial-share": "1.1.0-dev.
|
|
120
|
-
"@epam/ai-dial-skill-editor": "1.1.0-dev.
|
|
121
|
-
"@epam/ai-dial-source-panel": "1.1.0-dev.
|
|
118
|
+
"@epam/ai-dial-scheduled-tasks": "1.1.0-dev.444",
|
|
119
|
+
"@epam/ai-dial-share": "1.1.0-dev.444",
|
|
120
|
+
"@epam/ai-dial-skill-editor": "1.1.0-dev.444",
|
|
121
|
+
"@epam/ai-dial-source-panel": "1.1.0-dev.444",
|
|
122
122
|
"@epam/ai-dial-ui-kit": "*",
|
|
123
123
|
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
124
124
|
"@epam/pdf-highlighter-kit": ">=0.0.14",
|