@epam/ai-dial-chat-hooks 1.3.0-rc.0 → 1.4.0-dev.6

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.
@@ -26,7 +26,7 @@ export declare class GenerationPersistenceError extends Error {
26
26
  constructor(status?: number, terminalMarker?: GenerationPersistenceTerminalMarker);
27
27
  }
28
28
  /** Fallback text of a {@link GenerationConflictError} when no message is supplied. */
29
- 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.";
29
+ export declare const DEFAULT_GENERATION_CONFLICT_MESSAGE = "A response is already being generated in this conversation. Wait for it to finish before sending another message.";
30
30
  /**
31
31
  * Reported through `onError` when the backend rejects a completion because
32
32
  * another generation is already active on the same conversation — what a
@@ -1 +1 @@
1
- {"version":3,"file":"create-chat-stream-api.d.ts","sourceRoot":"","sources":["../../src/conversation/create-chat-stream-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,KAAK,EACV,oBAAoB,EACpB,WAAW,EACZ,MAAM,2BAA2B,CAAC;AAOnC,mFAAmF;AACnF,eAAO,MAAM,4CAA4C,0IACgF,CAAC;AAE1I,2FAA2F;AAC3F,eAAO,MAAM,4CAA4C,gGACsC,CAAC;AAEhG,2FAA2F;AAC3F,MAAM,WAAW,mCAAmC;IAClD,yFAAyF;IACzF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,yFAAyF;AACzF,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,MAAM,CAAC,QAAQ,CAAC,IAAI,8BAA8B;IAElD,iFAAiF;IACjF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEzB,4FAA4F;IAC5F,QAAQ,CAAC,cAAc,CAAC,EAAE,mCAAmC,CAAC;IAE9D;;;;OAIG;gBAED,MAAM,CAAC,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,mCAAmC;CAOvD;AAED,sFAAsF;AACtF,eAAO,MAAM,mCAAmC,iIACgF,CAAC;AAEjI;;;;;;GAMG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,OAAO,GAAE,MAA4C;CAIlE;AAED;;;;;;;GAOG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;;GAOG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,KAAK,CAAC,EAAE,OAAO;CAI5B;AAED,kEAAkE;AAClE,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,MAAM,EAAE,MAAM;CAK3B;AAMD,eAAO,MAAM,8BAA8B,QAAS,CAAC;AAErD,qFAAqF;AACrF,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACtC,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,0FAA0F;AAC1F,MAAM,WAAW,uBAAuB;IACtC,yEAAyE;IACzE,YAAY,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAClC,2DAA2D;IAC3D,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7C,iFAAiF;IACjF,mBAAmB,EAAE,MAAM,CAAC;IAC5B,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACvC,sFAAsF;IACtF,WAAW,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACvC,wFAAwF;IACxF,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAkID,wFAAwF;AACxF,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,CAChB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,2BAA2B,EACpC,aAAa,CAAC,EAAE,oBAAoB,EACpC,YAAY,CAAC,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,yBAAyB,EAChC,YAAY,CAAC,EAAE,MAAM,EACrB,eAAe,CAAC,EAAE,MAAM,KACrB,IAAI,CAAC;IACV,cAAc,EAAE,CAAC,GAAG,EAAE;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrB;AAED;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAC9B,MAAM,uBAAuB,KAC5B,aA2LF,CAAC"}
1
+ {"version":3,"file":"create-chat-stream-api.d.ts","sourceRoot":"","sources":["../../src/conversation/create-chat-stream-api.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ var e = { "Content-Type": "application/json" }, t = 409, n = "The response could
6
6
  constructor(e, t) {
7
7
  super(n), this.name = "GenerationPersistenceError", this.status = e, this.terminalMarker = t;
8
8
  }
9
- }, a = "A response is already being generated in this conversation. Wait for it to finish or stop it before sending another message.", o = class extends Error {
9
+ }, a = "A response is already being generated in this conversation. Wait for it to finish before sending another message.", o = class extends Error {
10
10
  constructor(e = a) {
11
11
  super(e), this.name = "GenerationConflictError";
12
12
  }
@@ -17,6 +17,14 @@ export declare const hasGeneratedPayload: (message: Message) => boolean;
17
17
  * anywhere, e.g. before a model-changed status message.
18
18
  */
19
19
  export declare const findPendingBackgroundMessageIndex: (conversation: Conversation) => number;
20
+ /**
21
+ * Index of the conversation's message whose `foregroundGeneration` marker is still live
22
+ * at `now` (its `expiresAt` is later), or -1. A live marker means the answer is being
23
+ * generated in another tab, on another device, or by another participant.
24
+ * @param conversation - conversation to inspect
25
+ * @param now - the client's clock, epoch ms
26
+ */
27
+ export declare const findLiveForegroundMessageIndex: (conversation: Conversation, now?: number) => number;
20
28
  /**
21
29
  * True when the conversation has a pending background message, or its last
22
30
  * message is an unresolved assistant placeholder: the backend only persists a
@@ -1 +1 @@
1
- {"version":3,"file":"generation-resume.d.ts","sourceRoot":"","sources":["../../../src/conversation/useConversationStream/generation-resume.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generation-resume.d.ts","sourceRoot":"","sources":["../../../src/conversation/useConversationStream/generation-resume.ts"],"names":[],"mappings":"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"}
@@ -9,165 +9,169 @@ import { BackgroundGenerationStatus as c, MessageRole as l } from "@epam/ai-dial
9
9
  var u = (e) => {
10
10
  let t = e.custom_content;
11
11
  return !!e.content || e.responseId != null || !!t?.attachments?.length || !!t?.stages?.length || !!t?.annotations?.length || !!t?.form_schema || t?.state != null;
12
- }, d = (e) => e.messages.findIndex((e) => e.backgroundGeneration?.status === c.Pending), f = (e) => {
13
- if (d(e) !== -1) return !0;
12
+ }, d = (e) => e.messages.findIndex((e) => e.backgroundGeneration?.status === c.Pending), f = (e, t = Date.now()) => e.messages.findIndex((e) => e.foregroundGeneration != null && t < e.foregroundGeneration.expiresAt), p = (e) => {
13
+ if (d(e) !== -1 || f(e) !== -1) return !0;
14
14
  let t = e.messages[e.messages.length - 1];
15
15
  return !!t && t.role === l.Assistant && !u(t) && t.streamErrorMessage == null && !t.wasStoppedByUser;
16
- }, p = 3e5, m = "awaiting-resume", h = [
16
+ }, m = 3e5, h = "awaiting-resume", g = [
17
17
  1e3,
18
18
  2e3,
19
19
  4e3,
20
20
  8e3,
21
21
  16e3
22
- ], g = (e) => new Promise((t) => {
22
+ ], _ = (e) => new Promise((t) => {
23
23
  let n = typeof window < "u", r = () => {
24
24
  clearTimeout(i), n && window.removeEventListener("online", r), t();
25
25
  }, i = setTimeout(r, e);
26
26
  n && window.addEventListener("online", r);
27
- }), _ = async (e, t, n) => {
28
- for (let r = 0; r <= h.length; r++) {
27
+ }), v = async (e, t, n) => {
28
+ for (let r = 0; r <= g.length; r++) {
29
29
  if (t()) return null;
30
30
  try {
31
31
  let t = await e();
32
32
  if (!n?.(t)) return t;
33
33
  } catch {}
34
- if (r === h.length) return null;
35
- await g(h[r]);
34
+ if (r === g.length) return null;
35
+ await _(g[r]);
36
36
  }
37
37
  return null;
38
- }, v = ({ transport: c, setConversation: l, conversationRef: h, resumingPathsRef: g, bufferedGenerationsRef: _, addStreamingPath: v, removeStreamingPath: y, isPathDisplayed: b, generationPersistenceErrorMessage: x = n, generationInterruptedMessage: S = t, frameScheduler: C, stoppedGenerationIdsRef: w, rememberResumedGenerationId: T, forgetResumedGenerationId: E, onReloadError: D, onReloadSuccess: O }) => (t, n, k = {}) => {
39
- if (!f(n)) {
40
- k.onSettled?.();
38
+ }, y = ({ transport: c, setConversation: l, conversationRef: g, resumingPathsRef: _, bufferedGenerationsRef: v, addStreamingPath: y, removeStreamingPath: b, isPathDisplayed: x, generationPersistenceErrorMessage: S = n, generationInterruptedMessage: C = t, frameScheduler: w, stoppedGenerationIdsRef: T, rememberResumedGenerationId: E, forgetResumedGenerationId: D, onReloadError: O, onReloadSuccess: k }) => (t, n, A = {}) => {
39
+ if (!p(n)) {
40
+ A.onSettled?.();
41
41
  return;
42
42
  }
43
- let A = a(t);
44
- if (!k.skipDedupe && g.current.has(A)) return;
45
- g.current.add(A), v(A);
46
- let j = d(n), M = j !== -1, N = M ? j : n.messages.length - 1, P = {
47
- generationId: m,
48
- messageIndex: N,
49
- message: k.seedMessage ?? n.messages[N]
43
+ let j = a(t);
44
+ if (!A.skipDedupe && _.current.has(j)) return;
45
+ _.current.add(j), y(j);
46
+ let M = d(n), N = M !== -1, P = N ? -1 : f(n), F = n.messages.length - 1;
47
+ N ? F = M : P !== -1 && (F = P);
48
+ let I = {
49
+ generationId: h,
50
+ messageIndex: F,
51
+ message: A.seedMessage ?? n.messages[F]
50
52
  };
51
- _.current.set(A, P);
52
- let F = () => _.current.get(A) === P, I = M ? n.messages[N].backgroundGeneration?.generationId : void 0, L, R = () => {
53
- let e = I ?? L;
54
- return e != null && (w?.current.has(e) ?? !1);
55
- }, z = (e) => {
56
- k.trackAttachGenerationId && !M && e != null && F() && (L = e, T?.(A, e));
57
- }, B = () => {
58
- if (L == null) return;
59
- let e = L;
60
- L = void 0, w?.current.delete(e), E?.(A, e);
61
- }, V = (e) => !!k.shouldMarkOrphanedAsInterrupted && !M && !!e && e.messages.length - 1 === N && d(e) === -1 && f(e) && !u(P.message), H = () => {
62
- P.message = {
63
- ...P.message,
64
- streamErrorMessage: S
53
+ v.current.set(j, I);
54
+ let L = () => v.current.get(j) === I, R = N ? n.messages[F].backgroundGeneration?.generationId : void 0, z, B = () => {
55
+ let e = R ?? z;
56
+ return e != null && (T?.current.has(e) ?? !1);
57
+ }, V = (e) => {
58
+ A.trackAttachGenerationId && !N && e != null && L() && (z = e, E?.(j, e));
59
+ }, H = () => {
60
+ if (z == null) return;
61
+ let e = z;
62
+ z = void 0, T?.current.delete(e), D?.(j, e);
63
+ };
64
+ P !== -1 && V(n.messages[P].foregroundGeneration?.generationId);
65
+ let U = (e) => !!A.shouldMarkOrphanedAsInterrupted && !N && !!e && e.messages.length - 1 === F && d(e) === -1 && f(e) === -1 && p(e) && !u(I.message), W = () => {
66
+ I.message = {
67
+ ...I.message,
68
+ streamErrorMessage: C
65
69
  };
66
- }, U = () => {
67
- F() && (H(), g.current.delete(A), y(A), B(), b(A) && l((e) => {
68
- if (!e || !F() || !b(A)) return e;
69
- let t = s(e, P);
70
- return h.current = t, t;
70
+ }, G = () => {
71
+ L() && (W(), _.current.delete(j), b(j), H(), x(j) && l((e) => {
72
+ if (!e || !L() || !x(j)) return e;
73
+ let t = s(e, I);
74
+ return g.current = t, t;
71
75
  }));
72
- }, W = (e, t = !1) => {
73
- if (C?.flush(A), I != null && w?.current.delete(I), B(), !F()) return;
74
- g.current.delete(A), y(A);
75
- let n = !M && e && e.messages.length - 1 === N && f(e) && u(P.message);
76
- if (t || n) P.message = {
77
- ...P.message,
78
- streamErrorMessage: x
79
- }, b(A) && l((e) => {
80
- if (!e || !F() || !b(A)) return e;
81
- let t = s(e, P);
82
- return h.current = t, t;
76
+ }, K = (e, t = !1) => {
77
+ if (w?.flush(j), R != null && T?.current.delete(R), H(), !L()) return;
78
+ _.current.delete(j), b(j);
79
+ let n = !N && e && e.messages.length - 1 === F && p(e) && u(I.message);
80
+ if (t || n) I.message = {
81
+ ...I.message,
82
+ streamErrorMessage: S
83
+ }, x(j) && l((e) => {
84
+ if (!e || !L() || !x(j)) return e;
85
+ let t = s(e, I);
86
+ return g.current = t, t;
83
87
  });
84
- else if (_.current.delete(A), e && b(A)) {
85
- let t = V(e);
86
- t && H();
87
- let n = t ? s(e, P) : e;
88
- l(n), h.current = n;
88
+ else if (v.current.delete(j), e && x(j)) {
89
+ let t = U(e);
90
+ t && W();
91
+ let n = t ? s(e, I) : e;
92
+ l(n), g.current = n;
89
93
  }
90
- }, G = async () => {
91
- if (F()) try {
94
+ }, q = async () => {
95
+ if (L()) try {
92
96
  let n = await c.getConversation(e(t));
93
- if (!F()) return;
94
- O?.(A), W(n);
97
+ if (!L()) return;
98
+ k?.(j), K(n);
95
99
  } catch {
96
- if (!F()) return;
97
- C?.flush(A), g.current.delete(A), y(A), I != null && w?.current.delete(I), B(), D?.(A, G, F);
100
+ if (!L()) return;
101
+ w?.flush(j), _.current.delete(j), b(j), R != null && T?.current.delete(R), H(), O?.(j, q, L);
98
102
  }
99
- }, K = (e) => {
100
- C?.cancel(A), F() && (P.message = e, b(A) && l((e) => {
101
- if (!e || !F() || !b(A)) return e;
102
- let t = s(e, P);
103
- return h.current = t, t;
103
+ }, J = (e) => {
104
+ w?.cancel(j), L() && (I.message = e, x(j) && l((e) => {
105
+ if (!e || !L() || !x(j)) return e;
106
+ let t = s(e, I);
107
+ return g.current = t, t;
104
108
  }));
105
- }, q = () => l((e) => {
106
- if (!e || !F() || !b(A)) return e;
107
- let t = s(e, P);
108
- return h.current = t, t;
109
- }), J = (e) => {
110
- if (!F() || R()) return;
111
- let t = o([P.message], 0, e);
112
- t && (P.message = t[0]), b(A) && (C ? C.schedule(A, q) : q());
113
- }, Y = async () => {
109
+ }, Y = () => l((e) => {
110
+ if (!e || !L() || !x(j)) return e;
111
+ let t = s(e, I);
112
+ return g.current = t, t;
113
+ }), X = (e) => {
114
+ if (!L() || B()) return;
115
+ let t = o([I.message], 0, e);
116
+ t && (I.message = t[0]), x(j) && (w ? w.schedule(j, Y) : Y());
117
+ }, Z = async () => {
114
118
  let n = new AbortController(), r;
115
119
  try {
116
- r = await c.watchConversation(A, n.signal);
120
+ r = await c.watchConversation(j, n.signal);
117
121
  } catch {
118
- await G();
122
+ await q();
119
123
  return;
120
124
  }
121
125
  try {
122
126
  let i = await c.getConversation(e(t));
123
- if (!f(i)) {
124
- n.abort(), r.cancel().catch(() => void 0), W(i);
127
+ if (!p(i)) {
128
+ n.abort(), r.cancel().catch(() => void 0), K(i);
125
129
  return;
126
130
  }
127
- V(i) && U();
131
+ U(i) && G();
128
132
  } catch {}
129
133
  let a = !1, o = window.setTimeout(() => {
130
134
  n.abort();
131
- }, p);
135
+ }, m);
132
136
  try {
133
137
  await i(r, async (n) => {
134
138
  if (n?.action !== "UPDATE") return !1;
135
139
  try {
136
140
  let n = await c.getConversation(e(t));
137
- if (!f(n)) return W(n), a = !0, !0;
141
+ if (!p(n)) return K(n), a = !0, !0;
138
142
  } catch {}
139
143
  return !1;
140
144
  });
141
145
  } finally {
142
146
  clearTimeout(o);
143
147
  }
144
- a || await G();
145
- }, X = async () => {
148
+ a || await q();
149
+ }, Q = async () => {
146
150
  let e = new AbortController(), t;
147
151
  try {
148
- t = await c.attachToGeneration(A, e.signal);
152
+ t = await c.attachToGeneration(j, e.signal);
149
153
  } catch {
150
154
  return !1;
151
155
  }
152
156
  let n = !1, a = !1;
153
157
  return await i(t, (e) => {
154
- if (!F()) return !0;
158
+ if (!L()) return !0;
155
159
  switch (e.type) {
156
- case "snapshot": return z(e.generationId), K(e.message), !1;
157
- case "chunk": return J(e.chunk), !1;
160
+ case "snapshot": return V(e.generationId), J(e.message), !1;
161
+ case "chunk": return X(e.chunk), !1;
158
162
  case "done":
159
163
  case "error":
160
164
  case "stopped": return a = e.type === "error" && e.errorType === r.type, n = !0, !0;
161
165
  }
162
- }), n ? (a ? W(void 0, !0) : await G(), !0) : (B(), !F());
166
+ }), n ? (a ? K(void 0, !0) : await q(), !0) : (H(), !L());
163
167
  };
164
168
  (async () => {
165
169
  try {
166
- await X() || await Y();
170
+ await Q() || await Z();
167
171
  } finally {
168
- k.onSettled?.();
172
+ A.onSettled?.();
169
173
  }
170
174
  })();
171
175
  };
172
176
  //#endregion
173
- export { h as RECOVERY_REFETCH_DELAYS_MS, v as createResumeIfAwaitingGeneration, _ as fetchConversationForRecovery, d as findPendingBackgroundMessageIndex, u as hasGeneratedPayload, f as isAwaitingGenerationResume };
177
+ export { g as RECOVERY_REFETCH_DELAYS_MS, y as createResumeIfAwaitingGeneration, v as fetchConversationForRecovery, f as findLiveForegroundMessageIndex, d as findPendingBackgroundMessageIndex, u as hasGeneratedPayload, p as isAwaitingGenerationResume };
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.3.0-rc.0",
4
+ "version": "1.4.0-dev.6",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
7
7
  "main": "./index.js",
@@ -131,7 +131,7 @@
131
131
  }
132
132
  },
133
133
  "dependencies": {
134
- "@epam/ai-dial-chat-api-client": "1.3.0-rc.0",
134
+ "@epam/ai-dial-chat-api-client": "1.4.0-dev.6",
135
135
  "dompurify": "3.4.17",
136
136
  "fflate": "^0.8.3",
137
137
  "lru-cache": "^10.4.3",
@@ -140,23 +140,23 @@
140
140
  },
141
141
  "peerDependencies": {
142
142
  "react": "^19.2.8",
143
- "@epam/ai-dial-attachment-canvas": "1.3.0-rc.0",
144
- "@epam/ai-dial-attachment-input": "1.3.0-rc.0",
145
- "@epam/ai-dial-catalog": "1.3.0-rc.0",
146
- "@epam/ai-dial-chat-overlay": "1.3.0-rc.0",
147
- "@epam/ai-dial-chat-shared": "1.3.0-rc.0",
148
- "@epam/ai-dial-conversation-input": "1.3.0-rc.0",
149
- "@epam/ai-dial-mcp-apps": "1.3.0-rc.0",
150
- "@epam/ai-dial-projects": "1.3.0-rc.0",
151
- "@epam/ai-dial-publish-panel": "1.3.0-rc.0",
152
- "@epam/ai-dial-quotations": "1.3.0-rc.0",
143
+ "@epam/ai-dial-attachment-canvas": "1.4.0-dev.6",
144
+ "@epam/ai-dial-attachment-input": "1.4.0-dev.6",
145
+ "@epam/ai-dial-catalog": "1.4.0-dev.6",
146
+ "@epam/ai-dial-chat-overlay": "1.4.0-dev.6",
147
+ "@epam/ai-dial-chat-shared": "1.4.0-dev.6",
148
+ "@epam/ai-dial-conversation-input": "1.4.0-dev.6",
149
+ "@epam/ai-dial-mcp-apps": "1.4.0-dev.6",
150
+ "@epam/ai-dial-projects": "1.4.0-dev.6",
151
+ "@epam/ai-dial-publish-panel": "1.4.0-dev.6",
152
+ "@epam/ai-dial-quotations": "1.4.0-dev.6",
153
153
  "@epam/ai-dial-react-file-manager": "^0.4.1",
154
- "@epam/ai-dial-scheduled-tasks": "1.3.0-rc.0",
155
- "@epam/ai-dial-share": "1.3.0-rc.0",
156
- "@epam/ai-dial-skill-editor": "1.3.0-rc.0",
157
- "@epam/ai-dial-source-panel": "1.3.0-rc.0",
154
+ "@epam/ai-dial-scheduled-tasks": "1.4.0-dev.6",
155
+ "@epam/ai-dial-share": "1.4.0-dev.6",
156
+ "@epam/ai-dial-skill-editor": "1.4.0-dev.6",
157
+ "@epam/ai-dial-source-panel": "1.4.0-dev.6",
158
158
  "@epam/ai-dial-ui-kit": "^0.16.0",
159
- "@epam/ai-dial-usage-dashboard": "1.3.0-rc.0",
159
+ "@epam/ai-dial-usage-dashboard": "1.4.0-dev.6",
160
160
  "@modelcontextprotocol/sdk": "^1.32.2",
161
161
  "@epam/pdf-highlighter-kit": "^0.0.21"
162
162
  },