@epam/ai-dial-chat-hooks 1.3.0-dev.288 → 1.3.0-dev.289

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/api-error/api-error.d.ts +2 -0
  2. package/api-error/api-error.d.ts.map +1 -1
  3. package/api-error/api-error.js +31 -23
  4. package/catalog/map-skill-to-catalog-item.js +19 -19
  5. package/catalog/useCatalogEditNavigation/useCatalogEditNavigation.d.ts +2 -4
  6. package/catalog/useCatalogEditNavigation/useCatalogEditNavigation.d.ts.map +1 -1
  7. package/catalog/useCatalogEditNavigation/useCatalogEditNavigation.js +94 -112
  8. package/catalog/useCatalogItemDelete/useCatalogItemDelete.d.ts +41 -0
  9. package/catalog/useCatalogItemDelete/useCatalogItemDelete.d.ts.map +1 -0
  10. package/catalog/useCatalogItemDelete/useCatalogItemDelete.js +37 -0
  11. package/catalog/usePublishFolders/usePublishFolders.d.ts +8 -0
  12. package/catalog/usePublishFolders/usePublishFolders.d.ts.map +1 -1
  13. package/catalog/usePublishFolders/usePublishFolders.js +32 -29
  14. package/catalog.js +11 -10
  15. package/conversation/conversation-title-stream.d.ts +33 -0
  16. package/conversation/conversation-title-stream.d.ts.map +1 -0
  17. package/conversation/conversation-title-stream.js +103 -0
  18. package/conversation/useConversationExport/useConversationExport.js +46 -46
  19. package/conversation/useConversationHandlers/useConversationHandlers.js +39 -39
  20. package/conversation/useConversationStream/useConversationStream.js +93 -93
  21. package/conversation.js +5 -4
  22. package/entry-points/catalog.d.ts +1 -0
  23. package/entry-points/catalog.d.ts.map +1 -1
  24. package/entry-points/conversation.d.ts +1 -0
  25. package/entry-points/conversation.d.ts.map +1 -1
  26. package/files/dial-file-manager-copy-move.util.js +16 -16
  27. package/files/dial-file-manager-mapping.util.js +17 -17
  28. package/files/useDialFileListing/useDialFileListing.js +113 -113
  29. package/files/useDialFileMutations/useDialFileMutations.js +47 -47
  30. package/index.d.ts +2 -0
  31. package/index.d.ts.map +1 -1
  32. package/index.js +213 -211
  33. package/oauth/useToolsetLogin/useToolsetLogin.d.ts +7 -1
  34. package/oauth/useToolsetLogin/useToolsetLogin.d.ts.map +1 -1
  35. package/oauth/useToolsetLogin/useToolsetLogin.js +40 -21
  36. package/offline-credentials/useOfflineCredentialsGate/useOfflineCredentialsGate.js +10 -10
  37. package/package.json +18 -18
  38. package/project/project-mapping.js +12 -12
  39. package/project/use-project-actions.js +12 -12
  40. package/project/use-project-watch.js +12 -12
  41. package/prompt/prompt.d.ts +11 -0
  42. package/prompt/prompt.d.ts.map +1 -1
  43. package/prompt/prompt.js +7 -3
  44. package/scheduled-task/use-scheduled-task-runs.js +13 -13
  45. package/usage/map-user-usage-to-model-limits.js +21 -21
  46. package/useShareLink/useShareLink.js +18 -18
  47. package/utils.js +21 -21
@@ -61,6 +61,12 @@ export interface UseToolsetLoginParams {
61
61
  logoutToolset: (toolsetId: string, body: ToolsetLogoutBodyDto) => Promise<unknown>;
62
62
  /** Re-reads a toolset so a reported cancellation can be checked against the backend. */
63
63
  getToolset: (toolsetId: string) => Promise<DialToolsetDto>;
64
+ /**
65
+ * Whether an OAuth login reads the toolset's current OAuth settings with
66
+ * `getToolset` after opening the popup, instead of using
67
+ * `ToolsetLoginParams.oauthSettings`. Defaults to `false`.
68
+ */
69
+ shouldFetchOAuthSettings?: boolean;
64
70
  }
65
71
  /** Result returned by {@link useToolsetLogin}. */
66
72
  export interface UseToolsetLoginResult {
@@ -75,5 +81,5 @@ export interface UseToolsetLoginResult {
75
81
  * outcome and shows nothing itself — mapping an outcome to notifications is
76
82
  * the caller's job.
77
83
  */
78
- export declare const useToolsetLogin: ({ callbackPath, loginToolset, logoutToolset, getToolset, }: UseToolsetLoginParams) => UseToolsetLoginResult;
84
+ export declare const useToolsetLogin: ({ callbackPath, loginToolset, logoutToolset, getToolset, shouldFetchOAuthSettings, }: UseToolsetLoginParams) => UseToolsetLoginResult;
79
85
  //# sourceMappingURL=useToolsetLogin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useToolsetLogin.d.ts","sourceRoot":"","sources":["../../../src/oauth/useToolsetLogin/useToolsetLogin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,+BAA+B,CAAC;AAIvC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAOtD,OAAO,EAGL,gBAAgB,EAChB,uBAAuB,EAGxB,MAAM,UAAU,CAAC;AAElB,kDAAkD;AAClD,oBAAY,uBAAuB;IACjC,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,YAAY,kBAAkB;IAC9B,SAAS,cAAc;CACxB;AAED,kDAAkD;AAClD,MAAM,WAAW,mBAAmB;IAClC,0DAA0D;IAC1D,IAAI,EAAE,uBAAuB,CAAC;CAC/B;AAED,sCAAsC;AACtC,MAAM,WAAW,kBAAkB;IACjC,kFAAkF;IAClF,SAAS,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,gBAAgB,EAAE,uBAAuB,CAAC;IAC1C,qDAAqD;IACrD,kBAAkB,EAAE,gBAAgB,CAAC;IACrC,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,8CAA8C;AAC9C,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,YAAY,EAAE,CACZ,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,mBAAmB,KACtB,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,0EAA0E;IAC1E,aAAa,EAAE,CACb,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,oBAAoB,KACvB,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,wFAAwF;IACxF,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;CAC5D;AAED,kDAAkD;AAClD,MAAM,WAAW,qBAAqB;IACpC,wEAAwE;IACxE,KAAK,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACrE;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,GAAI,4DAK7B,qBAAqB,KAAG,qBAqL1B,CAAC"}
1
+ {"version":3,"file":"useToolsetLogin.d.ts","sourceRoot":"","sources":["../../../src/oauth/useToolsetLogin/useToolsetLogin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,+BAA+B,CAAC;AAIvC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAOtD,OAAO,EAGL,gBAAgB,EAChB,uBAAuB,EAGxB,MAAM,UAAU,CAAC;AAElB,kDAAkD;AAClD,oBAAY,uBAAuB;IACjC,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,YAAY,kBAAkB;IAC9B,SAAS,cAAc;CACxB;AAED,kDAAkD;AAClD,MAAM,WAAW,mBAAmB;IAClC,0DAA0D;IAC1D,IAAI,EAAE,uBAAuB,CAAC;CAC/B;AAED,sCAAsC;AACtC,MAAM,WAAW,kBAAkB;IACjC,kFAAkF;IAClF,SAAS,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,gBAAgB,EAAE,uBAAuB,CAAC;IAC1C,qDAAqD;IACrD,kBAAkB,EAAE,gBAAgB,CAAC;IACrC,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,8CAA8C;AAC9C,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,YAAY,EAAE,CACZ,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,mBAAmB,KACtB,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,0EAA0E;IAC1E,aAAa,EAAE,CACb,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,oBAAoB,KACvB,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,wFAAwF;IACxF,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3D;;;;OAIG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,kDAAkD;AAClD,MAAM,WAAW,qBAAqB;IACpC,wEAAwE;IACxE,KAAK,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACrE;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,GAAI,sFAM7B,qBAAqB,KAAG,qBA2M1B,CAAC"}
@@ -7,8 +7,8 @@ import { useCallback as d } from "react";
7
7
  //#region src/oauth/useToolsetLogin/useToolsetLogin.ts
8
8
  var f = /* @__PURE__ */ function(e) {
9
9
  return e.Success = "success", e.Failure = "failure", e.PopupBlocked = "popup-blocked", e.Cancelled = "cancelled", e;
10
- }({}), p = ({ callbackPath: f, loginToolset: p, logoutToolset: m, getToolset: h }) => {
11
- let g = d(async (e, t, n) => {
10
+ }({}), p = ({ callbackPath: f, loginToolset: p, logoutToolset: m, getToolset: h, shouldFetchOAuthSettings: g = !1 }) => {
11
+ let _ = d(async (e, t, n) => {
12
12
  try {
13
13
  await m(e, {
14
14
  url: e,
@@ -16,29 +16,47 @@ var f = /* @__PURE__ */ function(e) {
16
16
  authenticationType: n
17
17
  });
18
18
  } catch {}
19
- }, [m]), _ = d(async (d) => {
20
- let { toolsetId: p, credentialsLevel: m, oauthSettings: _, forceStale: v, offlineUsageConsent: y } = d, b = {
21
- clientId: _?.clientId,
22
- authorizationEndpoint: _?.authorizationEndpoint,
23
- scopes: _?.scopes,
24
- codeChallenge: _?.codeChallenge,
25
- codeChallengeMethod: _?.codeChallengeMethod
26
- }, x = v ? await (async () => {
19
+ }, [m]), v = d(async (d) => {
20
+ let { toolsetId: p, credentialsLevel: m, oauthSettings: v, forceStale: y, offlineUsageConsent: b } = d, x = {
21
+ clientId: v?.clientId,
22
+ authorizationEndpoint: v?.authorizationEndpoint,
23
+ scopes: v?.scopes,
24
+ codeChallenge: v?.codeChallenge,
25
+ codeChallengeMethod: v?.codeChallengeMethod
26
+ }, S;
27
+ if (y || g) {
27
28
  let t = u();
28
- return t ? (await g(p, m, n.OAuth), l(t, b, p, f, m, e.Toolset, y)) : { type: r.Blocked };
29
- })() : c(b, p, f, m, y);
30
- if (x.type === r.Blocked) return { type: "popup-blocked" };
31
- if (x.type !== r.Started) return { type: "failure" };
32
- let S = await s(x.popup, x.flowId, {
29
+ if (!t) return { type: "popup-blocked" };
30
+ y && await _(p, m, n.OAuth);
31
+ let r = x;
32
+ if (g) try {
33
+ let { authSettings: e } = await h(p);
34
+ if (t.closed) return { type: "cancelled" };
35
+ if (e?.authenticationType !== n.OAuth) return t.close(), { type: "failure" };
36
+ r = {
37
+ clientId: e.clientId,
38
+ authorizationEndpoint: e.authorizationEndpoint,
39
+ scopes: e.scopesSupported,
40
+ codeChallenge: e.codeChallenge,
41
+ codeChallengeMethod: e.codeChallengeMethod
42
+ };
43
+ } catch {
44
+ return t.close(), { type: "failure" };
45
+ }
46
+ S = l(t, r, p, f, m, e.Toolset, b);
47
+ } else S = c(x, p, f, m, b);
48
+ if (S.type === r.Blocked) return { type: "popup-blocked" };
49
+ if (S.type !== r.Started) return { type: "failure" };
50
+ let C = await s(S.popup, S.flowId, {
33
51
  toolsetId: p,
34
52
  credentialsLevel: m,
35
53
  callbackPath: f
36
54
  });
37
- if (S.type === i.Success) return o({
55
+ if (C.type === i.Success) return o({
38
56
  toolsetId: p,
39
57
  credentialsLevel: m
40
58
  }), { type: "success" };
41
- if (S.type === i.Failure) return { type: "failure" };
59
+ if (C.type === i.Failure) return { type: "failure" };
42
60
  try {
43
61
  let e = await h(p);
44
62
  if (a(e.authSettings, m) === t.SignedIn) return o({
@@ -50,11 +68,12 @@ var f = /* @__PURE__ */ function(e) {
50
68
  }, [
51
69
  f,
52
70
  h,
71
+ _,
53
72
  g
54
- ]), v = d(async (e) => {
73
+ ]), y = d(async (e) => {
55
74
  let { toolsetId: t, credentialsLevel: n, authenticationType: r, apiKey: i, isCurrentlyFailed: a, forceStale: s, offlineUsageConsent: c } = e;
56
75
  try {
57
- return (s || a) && await g(t, n, r), await p(t, {
76
+ return (s || a) && await _(t, n, r), await p(t, {
58
77
  url: t,
59
78
  credentialsLevel: n,
60
79
  authenticationType: r,
@@ -67,8 +86,8 @@ var f = /* @__PURE__ */ function(e) {
67
86
  } catch {
68
87
  return { type: "failure" };
69
88
  }
70
- }, [p, g]);
71
- return { login: d((e) => e.authenticationType === n.OAuth ? _(e) : v(e), [_, v]) };
89
+ }, [p, _]);
90
+ return { login: d((e) => e.authenticationType === n.OAuth ? v(e) : y(e), [v, y]) };
72
91
  };
73
92
  //#endregion
74
93
  export { f as ToolsetLoginOutcomeType, p as useToolsetLogin };
@@ -1,18 +1,18 @@
1
1
  import { mapOfflineCredentialsResponse as e } from "../map-offline-credentials-response.js";
2
- import { useCallback as t, useEffect as n, useRef as r, useState as i } from "react";
3
- import { SchedulerServiceConsentStatus as a } from "@epam/ai-dial-chat-api-client";
2
+ import { SchedulerServiceConsentStatus as t } from "@epam/ai-dial-chat-api-client";
3
+ import { useCallback as n, useEffect as r, useRef as i, useState as a } from "react";
4
4
  //#region src/offline-credentials/useOfflineCredentialsGate/useOfflineCredentialsGate.ts
5
5
  var o = /* @__PURE__ */ function(e) {
6
6
  return e.Checking = "checking", e.Hidden = "hidden", e.Available = "available", e.Unavailable = "unavailable", e.Error = "error", e;
7
7
  }({}), s = ({ offlineCredentialsClient: o }) => {
8
- let [s, c] = i("checking"), [l, u] = i(void 0), [d, f] = i(!1), [p, m] = i(a.Unknown), h = r(null), g = t(async () => {
8
+ let [s, c] = a("checking"), [l, u] = a(void 0), [d, f] = a(!1), [p, m] = a(t.Unknown), h = i(null), g = n(async () => {
9
9
  h.current?.abort();
10
- let t = new AbortController();
11
- h.current = t, c("checking");
10
+ let n = new AbortController();
11
+ h.current = n, c("checking");
12
12
  try {
13
- let n = await o.getOfflineCredentials({ signal: t.signal });
14
- if (t.signal.aborted) return null;
15
- let { available: r, connected: i, connect: a, schedulerServiceConsent: s } = e(n);
13
+ let t = await o.getOfflineCredentials({ signal: n.signal });
14
+ if (n.signal.aborted) return null;
15
+ let { available: r, connected: i, connect: a, schedulerServiceConsent: s } = e(t);
16
16
  return c(i ? "hidden" : r ? "available" : "unavailable"), u(a), f(i), m(s), {
17
17
  available: r,
18
18
  connected: i,
@@ -20,10 +20,10 @@ var o = /* @__PURE__ */ function(e) {
20
20
  schedulerServiceConsent: s
21
21
  };
22
22
  } catch {
23
- return t.signal.aborted || (c("error"), u(void 0), m(a.Unknown)), null;
23
+ return n.signal.aborted || (c("error"), u(void 0), m(t.Unknown)), null;
24
24
  }
25
25
  }, [o]);
26
- return n(() => (g(), () => {
26
+ return r(() => (g(), () => {
27
27
  h.current?.abort();
28
28
  }), [g]), {
29
29
  status: s,
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-dev.288",
4
+ "version": "1.3.0-dev.289",
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-dev.288",
134
+ "@epam/ai-dial-chat-api-client": "1.3.0-dev.289",
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-dev.288",
144
- "@epam/ai-dial-attachment-input": "1.3.0-dev.288",
145
- "@epam/ai-dial-catalog": "1.3.0-dev.288",
146
- "@epam/ai-dial-chat-overlay": "1.3.0-dev.288",
147
- "@epam/ai-dial-chat-shared": "1.3.0-dev.288",
148
- "@epam/ai-dial-conversation-input": "1.3.0-dev.288",
149
- "@epam/ai-dial-mcp-apps": "1.3.0-dev.288",
150
- "@epam/ai-dial-projects": "1.3.0-dev.288",
151
- "@epam/ai-dial-publish-panel": "1.3.0-dev.288",
152
- "@epam/ai-dial-quotations": "1.3.0-dev.288",
143
+ "@epam/ai-dial-attachment-canvas": "1.3.0-dev.289",
144
+ "@epam/ai-dial-attachment-input": "1.3.0-dev.289",
145
+ "@epam/ai-dial-catalog": "1.3.0-dev.289",
146
+ "@epam/ai-dial-chat-overlay": "1.3.0-dev.289",
147
+ "@epam/ai-dial-chat-shared": "1.3.0-dev.289",
148
+ "@epam/ai-dial-conversation-input": "1.3.0-dev.289",
149
+ "@epam/ai-dial-mcp-apps": "1.3.0-dev.289",
150
+ "@epam/ai-dial-projects": "1.3.0-dev.289",
151
+ "@epam/ai-dial-publish-panel": "1.3.0-dev.289",
152
+ "@epam/ai-dial-quotations": "1.3.0-dev.289",
153
153
  "@epam/ai-dial-react-file-manager": "^0.4.0-dev.25",
154
- "@epam/ai-dial-scheduled-tasks": "1.3.0-dev.288",
155
- "@epam/ai-dial-share": "1.3.0-dev.288",
156
- "@epam/ai-dial-skill-editor": "1.3.0-dev.288",
157
- "@epam/ai-dial-source-panel": "1.3.0-dev.288",
158
- "@epam/ai-dial-ui-kit": "^0.16.0-dev.62",
159
- "@epam/ai-dial-usage-dashboard": "1.3.0-dev.288",
154
+ "@epam/ai-dial-scheduled-tasks": "1.3.0-dev.289",
155
+ "@epam/ai-dial-share": "1.3.0-dev.289",
156
+ "@epam/ai-dial-skill-editor": "1.3.0-dev.289",
157
+ "@epam/ai-dial-source-panel": "1.3.0-dev.289",
158
+ "@epam/ai-dial-ui-kit": "^0.16.0-dev.66",
159
+ "@epam/ai-dial-usage-dashboard": "1.3.0-dev.289",
160
160
  "@modelcontextprotocol/sdk": "^1.32.2",
161
161
  "@epam/pdf-highlighter-kit": "^0.0.19"
162
162
  },
@@ -1,11 +1,11 @@
1
- import { RequestStatus as e, getAttachmentTypeFromMime as t, inferMimeTypeFromPath as n } from "@epam/ai-dial-chat-shared";
2
- import { ProjectSource as r } from "@epam/ai-dial-chat-api-client";
1
+ import { ProjectSource as e } from "@epam/ai-dial-chat-api-client";
2
+ import { RequestStatus as t, getAttachmentTypeFromMime as n, inferMimeTypeFromPath as r } from "@epam/ai-dial-chat-shared";
3
3
  import { ProjectSource as i } from "@epam/ai-dial-projects";
4
4
  //#region src/project/project-mapping.ts
5
5
  var a = "", o = {
6
- [r.Personal]: i.Personal,
7
- [r.Shared]: i.Shared,
8
- [r.Organization]: i.Organization
6
+ [e.Personal]: i.Personal,
7
+ [e.Shared]: i.Shared,
8
+ [e.Organization]: i.Organization
9
9
  }, s = (e) => o[e], c = (e) => ({
10
10
  id: e.id,
11
11
  name: e.name,
@@ -18,17 +18,17 @@ var a = "", o = {
18
18
  instructions: e.instructions,
19
19
  contextFiles: e.contextFiles.map(({ name: e }) => ({
20
20
  name: e,
21
- contentType: n(e) ?? a
21
+ contentType: r(e) ?? a
22
22
  }))
23
- }), u = (r) => r.contextFiles.map(({ name: r, size: i }) => {
24
- let o = n(r) ?? a;
23
+ }), u = (e) => e.contextFiles.map(({ name: e, size: i }) => {
24
+ let o = r(e) ?? a;
25
25
  return {
26
- id: `stored:${r}`,
27
- name: r,
26
+ id: `stored:${e}`,
27
+ name: e,
28
28
  size: i,
29
29
  contentType: o,
30
- type: t(o),
31
- status: e.Idle,
30
+ type: n(o),
31
+ status: t.Idle,
32
32
  isStored: !0
33
33
  };
34
34
  });
@@ -1,15 +1,15 @@
1
1
  import { getApiErrorDetails as e } from "../api-error/api-error.js";
2
2
  import { sanitizeFileName as t } from "../files/file-name.js";
3
- import { useCallback as n, useMemo as r, useState as i } from "react";
4
- import { ProjectCreateErrorCode as a } from "@epam/ai-dial-chat-api-client";
3
+ import { ProjectCreateErrorCode as n } from "@epam/ai-dial-chat-api-client";
4
+ import { useCallback as r, useMemo as i, useState as a } from "react";
5
5
  //#region src/project/use-project-actions.ts
6
6
  var o = /* @__PURE__ */ function(e) {
7
7
  return e.Pin = "pin", e.Download = "download", e.Delete = "delete", e.ChangedElsewhere = "changed-elsewhere", e;
8
8
  }({}), s = (o, s, { isPinned: c, setPinned: l, saveFile: u, onArchiveDownloaded: d, onDeleted: f, onError: p, onReload: m }) => {
9
- let [h, g] = i(!1), [_, v] = i(!1), [y, b] = i(!1), x = n(async (t, n) => {
9
+ let [h, g] = a(!1), [_, v] = a(!1), [y, b] = a(!1), x = r(async (t, n) => {
10
10
  let { traceId: r } = await e(t);
11
11
  p(n, r);
12
- }, [p]), S = n(async () => {
12
+ }, [p]), S = r(async () => {
13
13
  if (s != null) {
14
14
  g(!0);
15
15
  try {
@@ -25,7 +25,7 @@ var o = /* @__PURE__ */ function(e) {
25
25
  c,
26
26
  l,
27
27
  x
28
- ]), C = n(async () => {
28
+ ]), C = r(async () => {
29
29
  if (s != null) try {
30
30
  let e = await u(await o.downloadProjectArchive(s.id), `${t(s.name)}.zip`);
31
31
  d?.(e);
@@ -38,20 +38,20 @@ var o = /* @__PURE__ */ function(e) {
38
38
  u,
39
39
  d,
40
40
  x
41
- ]), w = n(() => v(!0), []), T = n(() => {
41
+ ]), w = r(() => v(!0), []), T = r(() => {
42
42
  y || v(!1);
43
- }, [y]), E = n(async () => {
43
+ }, [y]), E = r(async () => {
44
44
  if (s != null) {
45
45
  b(!0);
46
46
  try {
47
47
  await o.deleteProject(s.id, s.contentVersion), v(!1), f(s);
48
48
  } catch (t) {
49
- let { code: n, traceId: r } = await e(t);
50
- if (n === a.ProjectChanged) {
51
- v(!1), p("changed-elsewhere", r), m();
49
+ let { code: r, traceId: i } = await e(t);
50
+ if (r === n.ProjectChanged) {
51
+ v(!1), p("changed-elsewhere", i), m();
52
52
  return;
53
53
  }
54
- p("delete", r);
54
+ p("delete", i);
55
55
  } finally {
56
56
  b(!1);
57
57
  }
@@ -63,7 +63,7 @@ var o = /* @__PURE__ */ function(e) {
63
63
  p,
64
64
  m
65
65
  ]);
66
- return r(() => ({
66
+ return i(() => ({
67
67
  isPinned: c,
68
68
  isPinPending: h,
69
69
  togglePin: S,
@@ -1,36 +1,36 @@
1
1
  import { runProjectWatch as e } from "./project-watch-stream.js";
2
- import { useEffect as t, useRef as n } from "react";
3
- import { ProjectWatchAction as r } from "@epam/ai-dial-chat-api-client";
2
+ import { ProjectWatchAction as t } from "@epam/ai-dial-chat-api-client";
3
+ import { useEffect as n, useRef as r } from "react";
4
4
  //#region src/project/use-project-watch.ts
5
5
  var i = (i, a, o) => {
6
- let s = n(o);
7
- t(() => {
6
+ let s = r(o);
7
+ n(() => {
8
8
  s.current = o;
9
9
  });
10
- let c = n(null), l = o.etag != null, { watchProjects: u } = i;
11
- t(() => {
10
+ let c = r(null), l = o.etag != null, { watchProjects: u } = i;
11
+ n(() => {
12
12
  if (u == null || a == null || !l || c.current === a) return;
13
- let t = new AbortController(), n = !1, i = !1, o = () => {
14
- t.signal.aborted || (n ? i = !0 : (n = !0, (async () => {
13
+ let n = new AbortController(), r = !1, i = !1, o = () => {
14
+ n.signal.aborted || (r ? i = !0 : (r = !0, (async () => {
15
15
  try {
16
16
  await s.current.onChange();
17
17
  } catch {} finally {
18
- n = !1, i && (i = !1, o());
18
+ r = !1, i && (i = !1, o());
19
19
  }
20
20
  })()));
21
21
  };
22
22
  return e({
23
23
  watchProjects: u,
24
24
  ids: [a],
25
- signal: t.signal,
25
+ signal: n.signal,
26
26
  onEvent: (e) => {
27
- e.id !== a || t.signal.aborted || (e.action === r.Delete ? (i = !1, t.abort(), s.current.onDelete()) : (e.etag == null || e.etag !== s.current.etag) && o());
27
+ e.id !== a || n.signal.aborted || (e.action === t.Delete ? (i = !1, n.abort(), s.current.onDelete()) : (e.etag == null || e.etag !== s.current.etag) && o());
28
28
  },
29
29
  onReconnected: o,
30
30
  onUnavailable: () => {
31
31
  c.current = a;
32
32
  }
33
- }), () => t.abort();
33
+ }), () => n.abort();
34
34
  }, [
35
35
  u,
36
36
  a,
@@ -23,6 +23,17 @@ export declare const validatePromptName: (name: string) => PromptFieldError | nu
23
23
  export declare const validatePromptDescription: (description: string) => PromptFieldError | null;
24
24
  /** Validates a prompt body: required, and within the backend's length limit. */
25
25
  export declare const validatePromptContent: (content: string) => PromptFieldError | null;
26
+ /** Field errors of a prompt form, keyed by field. */
27
+ export interface PromptFieldErrors {
28
+ /** Error of the name field. */
29
+ name?: PromptFieldError;
30
+ /** Error of the description field. */
31
+ description?: PromptFieldError;
32
+ /** Error of the prompt body field. */
33
+ content?: PromptFieldError;
34
+ }
35
+ /** The validator of each prompt form field. */
36
+ export declare const PROMPT_FIELD_VALIDATORS: Record<keyof PromptFieldErrors, (value: string) => PromptFieldError | null>;
26
37
  /**
27
38
  * Returns the characters left before a limit, or `null` while still further
28
39
  * away than the announce threshold — a counter that fires on every keystroke
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/prompt/prompt.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,oBAAY,gBAAgB;IAC1B,gDAAgD;IAChD,QAAQ,aAAa;IACrB,kEAAkE;IAClE,OAAO,YAAY;IACnB,oEAAoE;IACpE,WAAW,gBAAgB;IAC3B,4EAA4E;IAC5E,QAAQ,aAAa;CACtB;AAiBD,8DAA8D;AAC9D,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,4EAA4E;AAC5E,eAAO,MAAM,6BAA6B,OAAO,CAAC;AAElD,iEAAiE;AACjE,eAAO,MAAM,yBAAyB,QAAQ,CAAC;AAE/C,sFAAsF;AACtF,eAAO,MAAM,iCAAiC,KAAK,CAAC;AAEpD,yEAAyE;AACzE,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,KAAG,gBAAgB,GAAG,IAMpE,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,yBAAyB,GACpC,aAAa,MAAM,KAClB,gBAAgB,GAAG,IAGZ,CAAC;AAEX,gFAAgF;AAChF,eAAO,MAAM,qBAAqB,GAChC,SAAS,MAAM,KACd,gBAAgB,GAAG,IAMrB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,OAAO,MAAM,EACb,WAAW,MAAM,KAChB,MAAM,GAAG,IAGX,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,eAAe,GAAI,UAAU,MAAM,EAAE,MAAM,MAAM,KAAG,MACxB,CAAC"}
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/prompt/prompt.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,oBAAY,gBAAgB;IAC1B,gDAAgD;IAChD,QAAQ,aAAa;IACrB,kEAAkE;IAClE,OAAO,YAAY;IACnB,oEAAoE;IACpE,WAAW,gBAAgB;IAC3B,4EAA4E;IAC5E,QAAQ,aAAa;CACtB;AAiBD,8DAA8D;AAC9D,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,4EAA4E;AAC5E,eAAO,MAAM,6BAA6B,OAAO,CAAC;AAElD,iEAAiE;AACjE,eAAO,MAAM,yBAAyB,QAAQ,CAAC;AAE/C,sFAAsF;AACtF,eAAO,MAAM,iCAAiC,KAAK,CAAC;AAEpD,yEAAyE;AACzE,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,KAAG,gBAAgB,GAAG,IAMpE,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,yBAAyB,GACpC,aAAa,MAAM,KAClB,gBAAgB,GAAG,IAGZ,CAAC;AAEX,gFAAgF;AAChF,eAAO,MAAM,qBAAqB,GAChC,SAAS,MAAM,KACd,gBAAgB,GAAG,IAMrB,CAAC;AAEF,qDAAqD;AACrD,MAAM,WAAW,iBAAiB;IAChC,+BAA+B;IAC/B,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,sCAAsC;IACtC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,sCAAsC;IACtC,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B;AAED,+CAA+C;AAC/C,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAC1C,MAAM,iBAAiB,EACvB,CAAC,KAAK,EAAE,MAAM,KAAK,gBAAgB,GAAG,IAAI,CAK3C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,OAAO,MAAM,EACb,WAAW,MAAM,KAChB,MAAM,GAAG,IAGX,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,eAAe,GAAI,UAAU,MAAM,EAAE,MAAM,MAAM,KAAG,MACxB,CAAC"}
package/prompt/prompt.js CHANGED
@@ -4,9 +4,13 @@ var e = /* @__PURE__ */ function(e) {
4
4
  }({}), t = /^(?!\.{1,2}$)[a-zA-Z0-9 _.-]+$/, n = 256, r = 2e3, i = 5e4, a = 10, o = (e) => {
5
5
  let n = e.trim();
6
6
  return n.length === 0 ? "required" : n.length > 256 ? "tooLong" : t.test(n) ? null : "invalidName";
7
- }, s = (e) => e.length > 2e3 ? "tooLong" : null, c = (e) => e.trim().length === 0 ? "required" : e.length > 5e4 ? "tooLong" : null, l = (e, t) => {
7
+ }, s = (e) => e.length > 2e3 ? "tooLong" : null, c = (e) => e.trim().length === 0 ? "required" : e.length > 5e4 ? "tooLong" : null, l = {
8
+ name: o,
9
+ description: s,
10
+ content: c
11
+ }, u = (e, t) => {
8
12
  let n = t - e.length;
9
13
  return n <= 10 ? n : null;
10
- }, u = (e, t) => e ? `${e}/${t}` : t;
14
+ }, d = (e, t) => e ? `${e}/${t}` : t;
11
15
  //#endregion
12
- export { i as PROMPT_CONTENT_MAX_LENGTH, a as PROMPT_COUNTER_ANNOUNCE_THRESHOLD, r as PROMPT_DESCRIPTION_MAX_LENGTH, n as PROMPT_NAME_MAX_LENGTH, e as PromptFieldError, u as buildPromptPath, l as getRemainingCharacters, c as validatePromptContent, s as validatePromptDescription, o as validatePromptName };
16
+ export { i as PROMPT_CONTENT_MAX_LENGTH, a as PROMPT_COUNTER_ANNOUNCE_THRESHOLD, r as PROMPT_DESCRIPTION_MAX_LENGTH, l as PROMPT_FIELD_VALIDATORS, n as PROMPT_NAME_MAX_LENGTH, e as PromptFieldError, d as buildPromptPath, u as getRemainingCharacters, c as validatePromptContent, s as validatePromptDescription, o as validatePromptName };
@@ -1,5 +1,5 @@
1
- import { useCallback as e, useEffect as t, useRef as n, useState as r } from "react";
2
- import { ScheduledTaskRunDtoStatusEnum as i } from "@epam/ai-dial-chat-api-client";
1
+ import { ScheduledTaskRunDtoStatusEnum as e } from "@epam/ai-dial-chat-api-client";
2
+ import { useCallback as t, useEffect as n, useRef as r, useState as i } from "react";
3
3
  //#region src/scheduled-task/use-scheduled-task-runs.ts
4
4
  var a = 15e3, o = 48, s = 5e3, c = 2147483647, l = (e, t) => {
5
5
  if (e <= c) {
@@ -21,10 +21,10 @@ var a = 15e3, o = 48, s = 5e3, c = 2147483647, l = (e, t) => {
21
21
  return !t || JSON.stringify(t) !== JSON.stringify(e);
22
22
  });
23
23
  }, f = (c, { scheduleId: f, enabled: p = !0, pageSize: m = 10, nextRunTime: h, pollWhileActive: g = !1 }) => {
24
- let [_, v] = r([]), [y, b] = r(p), [x, S] = r(!1), [C, w] = r(null), [T, E] = r(null), [D, O] = r(!1), [k, A] = r(0), j = n(0), M = n(0), N = n(!1), P = n(null), F = n(_), I = n(y), L = n(x), R = n(null), z = n(0), B = n(null), V = n(!1);
24
+ let [_, v] = i([]), [y, b] = i(p), [x, S] = i(!1), [C, w] = i(null), [T, E] = i(null), [D, O] = i(!1), [k, A] = i(0), j = r(0), M = r(0), N = r(!1), P = r(null), F = r(_), I = r(y), L = r(x), R = r(null), z = r(0), B = r(null), V = r(!1);
25
25
  F.current = _, I.current = y, L.current = x;
26
- let H = g || _.some((e) => e.status === i.InProgress);
27
- t(() => {
26
+ let H = g || _.some((t) => t.status === e.InProgress);
27
+ n(() => {
28
28
  let e = ++j.current, t = new AbortController();
29
29
  P.current?.abort(), P.current = null, R.current?.abort(), R.current = null, N.current = !1, z.current = 0, B.current = null, V.current = !1, S(!1), w(null), E(null), v([]), O(!1), M.current = 0;
30
30
  let n = () => {
@@ -54,7 +54,7 @@ var a = 15e3, o = 48, s = 5e3, c = 2147483647, l = (e, t) => {
54
54
  k,
55
55
  f
56
56
  ]);
57
- let U = e(() => {
57
+ let U = t(() => {
58
58
  if (!p || !f || !D || y || N.current) return;
59
59
  N.current = !0;
60
60
  let e = new AbortController();
@@ -87,7 +87,7 @@ var a = 15e3, o = 48, s = 5e3, c = 2147483647, l = (e, t) => {
87
87
  y,
88
88
  m,
89
89
  f
90
- ]), W = e(async () => {
90
+ ]), W = t(async () => {
91
91
  if (I.current || L.current) return "skipped";
92
92
  let e = j.current, t = new AbortController();
93
93
  R.current?.abort(), R.current = t;
@@ -110,10 +110,10 @@ var a = 15e3, o = 48, s = 5e3, c = 2147483647, l = (e, t) => {
110
110
  c,
111
111
  f,
112
112
  m
113
- ]), G = e(() => {
113
+ ]), G = t(() => {
114
114
  document.visibilityState === "visible" ? W() : V.current = !0;
115
115
  }, [W]);
116
- return t(() => {
116
+ return n(() => {
117
117
  if (!p || !f || !H) return;
118
118
  z.current = 0;
119
119
  let e = setInterval(() => {
@@ -130,7 +130,7 @@ var a = 15e3, o = 48, s = 5e3, c = 2147483647, l = (e, t) => {
130
130
  f,
131
131
  H,
132
132
  W
133
- ]), t(() => {
133
+ ]), n(() => {
134
134
  if (!p || !f || !h) return;
135
135
  let e = new Date(h).getTime();
136
136
  if (!(Number.isNaN(e) || e <= Date.now())) return l(e - Date.now() + s, () => {
@@ -141,7 +141,7 @@ var a = 15e3, o = 48, s = 5e3, c = 2147483647, l = (e, t) => {
141
141
  f,
142
142
  h,
143
143
  G
144
- ]), t(() => {
144
+ ]), n(() => {
145
145
  if (!p || !f) return;
146
146
  let e = () => {
147
147
  document.visibilityState === "visible" && V.current && (async () => {
@@ -155,7 +155,7 @@ var a = 15e3, o = 48, s = 5e3, c = 2147483647, l = (e, t) => {
155
155
  p,
156
156
  f,
157
157
  W
158
- ]), t(() => {
158
+ ]), n(() => {
159
159
  if (!p || !f || !h || y || x) return;
160
160
  let e = new Date(h).getTime();
161
161
  Number.isNaN(e) || e > Date.now() || B.current !== h && (B.current = h, G());
@@ -175,7 +175,7 @@ var a = 15e3, o = 48, s = 5e3, c = 2147483647, l = (e, t) => {
175
175
  hasMore: D,
176
176
  loadMore: U,
177
177
  retryLoadMore: U,
178
- refetch: e(() => A((e) => e + 1), [])
178
+ refetch: t(() => A((e) => e + 1), [])
179
179
  };
180
180
  };
181
181
  //#endregion
@@ -1,6 +1,6 @@
1
1
  import { normalizeDeploymentId as e } from "../catalog/deployment-id.js";
2
- import { formatCost as t } from "@epam/ai-dial-chat-shared";
3
- import { DeploymentItemDtoTypeEnum as n } from "@epam/ai-dial-chat-api-client";
2
+ import { DeploymentItemDtoTypeEnum as t } from "@epam/ai-dial-chat-api-client";
3
+ import { formatCost as n } from "@epam/ai-dial-chat-shared";
4
4
  import { ModelLimitMetricKind as r, ModelLimitStatus as i } from "@epam/ai-dial-usage-dashboard";
5
5
  //#region src/usage/map-user-usage-to-model-limits.ts
6
6
  var a = 2 ** 53, o = 75, s = new Intl.NumberFormat(void 0, {
@@ -95,9 +95,9 @@ var a = 2 ** 53, o = 75, s = new Intl.NumberFormat(void 0, {
95
95
  percent: Math.round(m)
96
96
  })
97
97
  };
98
- }, x = (e, n) => {
99
- if (!f(e)) return y(n);
100
- let i = Math.max(0, e.used), o = n(l.spentLabel, { amount: t(i) });
98
+ }, x = (e, t) => {
99
+ if (!f(e)) return y(t);
100
+ let i = Math.max(0, e.used), o = t(l.spentLabel, { amount: n(i) });
101
101
  if (e.total >= a) return {
102
102
  kind: r.Unlimited,
103
103
  usedLabel: o,
@@ -107,12 +107,12 @@ var a = 2 ** 53, o = 75, s = new Intl.NumberFormat(void 0, {
107
107
  return {
108
108
  kind: r.Finite,
109
109
  usedLabel: o,
110
- totalLabel: t(s),
110
+ totalLabel: n(s),
111
111
  usedPercent: c,
112
112
  status: p(c),
113
- ariaLabel: n(l.progressAriaLabel, {
114
- used: t(i),
115
- total: t(s),
113
+ ariaLabel: t(l.progressAriaLabel, {
114
+ used: n(i),
115
+ total: n(s),
116
116
  percent: Math.round(c)
117
117
  })
118
118
  };
@@ -135,31 +135,31 @@ var a = 2 ** 53, o = 75, s = new Intl.NumberFormat(void 0, {
135
135
  supportingLabel: n(l.includesCalledModelsLabel)
136
136
  } : i
137
137
  };
138
- }, E = (e) => e.some((e) => f(e) && e.used > 0), D = (t, r, i, a, o, s) => {
139
- let c = t?.deployments;
138
+ }, E = (e) => e.some((e) => f(e) && e.used > 0), D = (n, r, i, a, o, s) => {
139
+ let c = n?.deployments;
140
140
  if (c == null) return [];
141
- let d = new Map(r.filter((e) => e.type === n.Model || e.type === n.Application).map((t) => [e(t.id), t])), f = v(t, i, a);
142
- return Object.keys(c).map((t) => {
143
- let r = d.get(e(t)), p = r == null ? t : s(r.displayName, i) || r.id, m = c[t], h = o(r?.iconUrl);
144
- if (r?.type === n.Application) {
145
- let e = T(m, u.day, a), n = T(m, u.week, a), i = T(m, u.month, a);
141
+ let d = new Map(r.filter((e) => e.type === t.Model || e.type === t.Application).map((t) => [e(t.id), t])), f = v(n, i, a);
142
+ return Object.keys(c).map((n) => {
143
+ let r = d.get(e(n)), p = r == null ? n : s(r.displayName, i) || r.id, m = c[n], h = o(r?.iconUrl);
144
+ if (r?.type === t.Application) {
145
+ let e = T(m, u.day, a), t = T(m, u.week, a), i = T(m, u.month, a);
146
146
  return {
147
147
  row: {
148
- id: t,
148
+ id: n,
149
149
  name: p,
150
150
  version: r.displayVersion,
151
151
  avatarSrc: h,
152
152
  typeLabel: a(l.applicationTypeLabel),
153
153
  day: e,
154
- week: n,
154
+ week: t,
155
155
  month: i,
156
156
  status: w([
157
157
  e.tokens,
158
- n.tokens,
158
+ t.tokens,
159
159
  i.tokens
160
160
  ], [
161
161
  e.cost,
162
- n.cost,
162
+ t.cost,
163
163
  i.cost
164
164
  ], [
165
165
  f.day.status,
@@ -173,7 +173,7 @@ var a = 2 ** 53, o = 75, s = new Intl.NumberFormat(void 0, {
173
173
  let g = S(m, u.day, f.day.status, a), _ = S(m, u.week, f.week.status, a), v = S(m, u.month, f.month.status, a), y = Object.values(u).flatMap(({ cost: e, tokens: t }) => [m[e], m[t]]);
174
174
  return {
175
175
  row: {
176
- id: t,
176
+ id: n,
177
177
  name: p,
178
178
  version: r?.displayVersion,
179
179
  avatarSrc: h,