@epam/ai-dial-chat-hooks 1.3.0-dev.282 → 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 (75) 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/entry-points/project.d.ts +3 -0
  27. package/entry-points/project.d.ts.map +1 -1
  28. package/files/dial-file-manager-copy-move.util.js +16 -16
  29. package/files/dial-file-manager-mapping.util.js +17 -17
  30. package/files/useDialFileListing/useDialFileListing.js +113 -113
  31. package/files/useDialFileMutations/useDialFileMutations.js +47 -47
  32. package/index.d.ts +5 -0
  33. package/index.d.ts.map +1 -1
  34. package/index.js +213 -208
  35. package/oauth/useToolsetLogin/useToolsetLogin.d.ts +7 -1
  36. package/oauth/useToolsetLogin/useToolsetLogin.d.ts.map +1 -1
  37. package/oauth/useToolsetLogin/useToolsetLogin.js +40 -21
  38. package/offline-credentials/useOfflineCredentialsGate/useOfflineCredentialsGate.js +10 -10
  39. package/package.json +18 -18
  40. package/project/project-events.d.ts +2 -2
  41. package/project/project-events.d.ts.map +1 -1
  42. package/project/project-events.js +3 -2
  43. package/project/project-mapping.js +12 -12
  44. package/project/project-refresh.d.ts +12 -0
  45. package/project/project-refresh.d.ts.map +1 -0
  46. package/project/project-refresh.js +6 -0
  47. package/project/project-watch-stream.d.ts +26 -0
  48. package/project/project-watch-stream.d.ts.map +1 -0
  49. package/project/project-watch-stream.js +39 -0
  50. package/project/projects-api-client.d.ts +6 -0
  51. package/project/projects-api-client.d.ts.map +1 -1
  52. package/project/projects-api-client.js +1 -0
  53. package/project/use-project-actions.js +12 -12
  54. package/project/use-project-conversations.d.ts +8 -6
  55. package/project/use-project-conversations.d.ts.map +1 -1
  56. package/project/use-project-conversations.js +129 -56
  57. package/project/use-project-watch.d.ts +24 -0
  58. package/project/use-project-watch.d.ts.map +1 -0
  59. package/project/use-project-watch.js +41 -0
  60. package/project/use-project.d.ts +4 -1
  61. package/project/use-project.d.ts.map +1 -1
  62. package/project/use-project.js +47 -22
  63. package/project/use-projects.d.ts.map +1 -1
  64. package/project/use-projects.js +49 -68
  65. package/project.js +8 -5
  66. package/prompt/prompt.d.ts +11 -0
  67. package/prompt/prompt.d.ts.map +1 -1
  68. package/prompt/prompt.js +7 -3
  69. package/scheduled-task/use-scheduled-task-runs.js +13 -13
  70. package/shared/serialized-writer.d.ts +10 -0
  71. package/shared/serialized-writer.d.ts.map +1 -0
  72. package/shared/serialized-writer.js +35 -0
  73. package/usage/map-user-usage-to-model-limits.js +21 -21
  74. package/useShareLink/useShareLink.js +18 -18
  75. 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.282",
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.282",
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.282",
144
- "@epam/ai-dial-attachment-input": "1.3.0-dev.282",
145
- "@epam/ai-dial-catalog": "1.3.0-dev.282",
146
- "@epam/ai-dial-chat-overlay": "1.3.0-dev.282",
147
- "@epam/ai-dial-chat-shared": "1.3.0-dev.282",
148
- "@epam/ai-dial-conversation-input": "1.3.0-dev.282",
149
- "@epam/ai-dial-mcp-apps": "1.3.0-dev.282",
150
- "@epam/ai-dial-projects": "1.3.0-dev.282",
151
- "@epam/ai-dial-publish-panel": "1.3.0-dev.282",
152
- "@epam/ai-dial-quotations": "1.3.0-dev.282",
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.282",
155
- "@epam/ai-dial-share": "1.3.0-dev.282",
156
- "@epam/ai-dial-skill-editor": "1.3.0-dev.282",
157
- "@epam/ai-dial-source-panel": "1.3.0-dev.282",
158
- "@epam/ai-dial-ui-kit": "^0.16.0-dev.62",
159
- "@epam/ai-dial-usage-dashboard": "1.3.0-dev.282",
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,7 +1,7 @@
1
1
  import { ProjectWatchEventDto } from '@epam/ai-dial-chat-api-client';
2
2
  import { ProjectItem } from '@epam/ai-dial-projects';
3
- /** The part of a projects watch event the list reacts to. */
4
- export type ProjectWatchEvent = Pick<ProjectWatchEventDto, 'id' | 'action' | 'timestamp'>;
3
+ /** The part of a projects watch event the hooks react to; `etag` is the project's new aggregate ETag, absent on a delete. */
4
+ export type ProjectWatchEvent = Pick<ProjectWatchEventDto, 'id' | 'action' | 'timestamp' | 'etag'>;
5
5
  /** Returns the payload as a {@link ProjectWatchEvent}, or `undefined` when it is not one. */
6
6
  export declare const parseProjectWatchEvent: (payload: unknown) => ProjectWatchEvent | undefined;
7
7
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"project-events.d.ts","sourceRoot":"","sources":["../../src/project/project-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,6DAA6D;AAC7D,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAClC,oBAAoB,EACpB,IAAI,GAAG,QAAQ,GAAG,WAAW,CAC9B,CAAC;AAMF,6FAA6F;AAC7F,eAAO,MAAM,sBAAsB,GACjC,SAAS,OAAO,KACf,iBAAiB,GAAG,SAYtB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAC5B,OAAO,WAAW,EAAE,EACpB,OAAO,iBAAiB,KACvB,WAAW,EAab,CAAC"}
1
+ {"version":3,"file":"project-events.d.ts","sourceRoot":"","sources":["../../src/project/project-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,6HAA6H;AAC7H,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAClC,oBAAoB,EACpB,IAAI,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,CACvC,CAAC;AAMF,6FAA6F;AAC7F,eAAO,MAAM,sBAAsB,GACjC,SAAS,OAAO,KACf,iBAAiB,GAAG,SAiBtB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAC5B,OAAO,WAAW,EAAE,EACpB,OAAO,iBAAiB,KACvB,WAAW,EAab,CAAC"}
@@ -2,11 +2,12 @@ import { ProjectWatchAction as e } from "@epam/ai-dial-chat-api-client";
2
2
  //#region src/project/project-events.ts
3
3
  var t = new Set(Object.values(e)), n = (e) => {
4
4
  if (typeof e != "object" || !e) return;
5
- let { id: n, action: r, timestamp: i } = e;
5
+ let { id: n, action: r, timestamp: i, etag: a } = e;
6
6
  if (typeof n == "string" && typeof r == "string" && t.has(r) && typeof i == "number") return {
7
7
  id: n,
8
8
  action: r,
9
- timestamp: i
9
+ timestamp: i,
10
+ ...typeof a == "string" ? { etag: a } : {}
10
11
  };
11
12
  }, r = (t, n) => {
12
13
  let r = t.findIndex((e) => e.id === n.id);
@@ -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
  });
@@ -0,0 +1,12 @@
1
+ /** How a silent refresh of one loaded project ended. */
2
+ export declare enum ProjectRefreshOutcome {
3
+ /** The details were replaced with the fresh read. */
4
+ Updated = "updated",
5
+ /** The project no longer exists; the page should leave it. */
6
+ NotFound = "not-found",
7
+ /** The read failed; the loaded details are kept. */
8
+ Failed = "failed",
9
+ /** No project was loaded, or a newer refresh or an id change superseded this one. */
10
+ Skipped = "skipped"
11
+ }
12
+ //# sourceMappingURL=project-refresh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-refresh.d.ts","sourceRoot":"","sources":["../../src/project/project-refresh.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,oBAAY,qBAAqB;IAC/B,qDAAqD;IACrD,OAAO,YAAY;IACnB,8DAA8D;IAC9D,QAAQ,cAAc;IACtB,oDAAoD;IACpD,MAAM,WAAW;IACjB,qFAAqF;IACrF,OAAO,YAAY;CACpB"}
@@ -0,0 +1,6 @@
1
+ //#region src/project/project-refresh.ts
2
+ var e = /* @__PURE__ */ function(e) {
3
+ return e.Updated = "updated", e.NotFound = "not-found", e.Failed = "failed", e.Skipped = "skipped", e;
4
+ }({});
5
+ //#endregion
6
+ export { e as ProjectRefreshOutcome };
@@ -0,0 +1,26 @@
1
+ import { ProjectWatchEvent } from './project-events';
2
+ import { ProjectsApiClient } from './projects-api-client';
3
+ /** Delays before each reconnect attempt of a dropped watch stream. */
4
+ export declare const WATCH_RECONNECT_DELAYS_MS: number[];
5
+ /** One run of a projects watch stream, from its first open until it gives up or `signal` aborts. */
6
+ export interface ProjectWatchRun {
7
+ /** The client's stream opener. */
8
+ watchProjects: NonNullable<ProjectsApiClient['watchProjects']>;
9
+ /** The project ids to watch. */
10
+ ids: string[];
11
+ /** Ends the run: the open stream is released and no reconnect fires. */
12
+ signal: AbortSignal;
13
+ /** Called with each well-formed event. */
14
+ onEvent: (event: ProjectWatchEvent) => void;
15
+ /** Called after a dropped stream was reopened, so the caller can catch up on the gap. */
16
+ onReconnected: () => void;
17
+ /** Called once when the watch cannot be opened or kept open, for the rest of the visit. */
18
+ onUnavailable: () => void;
19
+ }
20
+ /**
21
+ * Keeps a projects watch open: a stream that drops is reopened with a bounded
22
+ * backoff, and a watch whose first open fails (a Core without project events,
23
+ * a project no longer readable) or whose retries run out gives up.
24
+ */
25
+ export declare const runProjectWatch: ({ watchProjects, ids, signal, onEvent, onReconnected, onUnavailable, }: ProjectWatchRun) => void;
26
+ //# sourceMappingURL=project-watch-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-watch-stream.d.ts","sourceRoot":"","sources":["../../src/project/project-watch-stream.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,sEAAsE;AACtE,eAAO,MAAM,yBAAyB,UAAkC,CAAC;AAEzE,oGAAoG;AACpG,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,aAAa,EAAE,WAAW,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC,CAAC;IAC/D,gCAAgC;IAChC,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,wEAAwE;IACxE,MAAM,EAAE,WAAW,CAAC;IACpB,0CAA0C;IAC1C,OAAO,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC5C,yFAAyF;IACzF,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,2FAA2F;IAC3F,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,wEAO7B,eAAe,KAAG,IA2CpB,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { parseProjectWatchEvent as e } from "./project-events.js";
2
+ import { readSseEvents as t } from "../shared/read-sse-events.js";
3
+ //#region src/project/project-watch-stream.ts
4
+ var n = [
5
+ 1e3,
6
+ 2e3,
7
+ 4e3,
8
+ 8e3,
9
+ 16e3
10
+ ], r = ({ watchProjects: r, ids: i, signal: a, onEvent: o, onReconnected: s, onUnavailable: c }) => {
11
+ let l;
12
+ a.addEventListener("abort", () => clearTimeout(l), { once: !0 });
13
+ let u = (t) => {
14
+ let n = e(t);
15
+ return n != null && o(n), a.aborted;
16
+ }, d = (e) => {
17
+ let t = n[e];
18
+ t == null ? c() : l = setTimeout(() => {
19
+ f(e, !0);
20
+ }, t);
21
+ }, f = async (e, n) => {
22
+ let o;
23
+ try {
24
+ o = await r(i, a);
25
+ } catch {
26
+ if (a.aborted) return;
27
+ if (!n) {
28
+ c();
29
+ return;
30
+ }
31
+ d(e + 1);
32
+ return;
33
+ }
34
+ n && s(), await t(o, u), !a.aborted && d(0);
35
+ };
36
+ f(0, !1);
37
+ };
38
+ //#endregion
39
+ export { n as WATCH_RECONNECT_DELAYS_MS, r as runProjectWatch };
@@ -69,6 +69,10 @@ export interface ProjectsConfiguredClient {
69
69
  id: string;
70
70
  conversationName: string;
71
71
  }) => Promise<void>;
72
+ markProjectConversationViewed: (request: {
73
+ id: string;
74
+ conversationName: string;
75
+ }) => Promise<void>;
72
76
  attachToProjectGenerationRaw: (request: {
73
77
  id: string;
74
78
  attachGenerationDto: {
@@ -140,6 +144,8 @@ export interface ProjectsApiClient {
140
144
  saveProjectConversation: (conversationId: string, conversation: ConversationResponseDto) => Promise<ConversationResponseDto>;
141
145
  renameProjectConversation: (conversationId: string, newTitle: string) => Promise<RenameConversationResponseDto>;
142
146
  deleteProjectConversation: (conversationId: string) => Promise<void>;
147
+ /** Records that the caller has seen the conversation's current version; a host without it keeps no read state. */
148
+ markProjectConversationViewed?: (conversationId: string) => Promise<void>;
143
149
  attachToProjectGeneration: (projectId: string, path: string, signal?: AbortSignal) => Promise<ReadableStream<Uint8Array>>;
144
150
  /** Opens the SSE stream of changes to the given projects; a host without it gets no live updates. */
145
151
  watchProjects?: (ids: string[], signal?: AbortSignal) => Promise<ReadableStream<Uint8Array>>;
@@ -1 +1 @@
1
- {"version":3,"file":"projects-api-client.d.ts","sourceRoot":"","sources":["../../src/project/projects-api-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"projects-api-client.d.ts","sourceRoot":"","sources":["../../src/project/projects-api-client.ts"],"names":[],"mappings":"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"}
@@ -68,6 +68,7 @@ var e = (e) => {
68
68
  renameConversationBodyDto: { newTitle: r }
69
69
  }),
70
70
  deleteProjectConversation: (n) => e.deleteProjectConversation(t(n)),
71
+ markProjectConversationViewed: (n) => e.markProjectConversationViewed(t(n)),
71
72
  attachToProjectGeneration: async (t, r, i) => {
72
73
  let { raw: a } = await e.attachToProjectGenerationRaw({
73
74
  id: t,
@@ -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,
@@ -2,20 +2,22 @@ import { ProjectConversationListItem } from '@epam/ai-dial-projects';
2
2
  import { ProjectsApiClient } from './projects-api-client';
3
3
  /**
4
4
  * Loads a project's conversations for its Chats list and keeps them in local
5
- * state: there is no live subscription, so the first page is read once per
6
- * project (and on retry), `loadMore` appends the next one, and rename and
7
- * delete update the list in place. Requests are aborted when the project
8
- * changes or the view unmounts. Rename, delete and `loadMore` reject on
9
- * failure for the caller's toast.
5
+ * state: the first page is read once per project (and on retry), `loadMore`
6
+ * appends the next one, `refresh` silently re-reads the rows already shown
7
+ * for live updates, and rename, delete and `markViewed` update the list in
8
+ * place. Requests are aborted when the project changes or the view unmounts.
9
+ * Rename, delete and `loadMore` reject on failure for the caller's toast.
10
10
  *
11
11
  * @param client - Configured project requests, from `createProjectsApiClient`; it must be referentially stable, because a new object reloads the list.
12
12
  * @param projectId - The project's DIAL id, or `null` while none is known.
13
13
  */
14
- export declare const useProjectConversations: (client: Pick<ProjectsApiClient, "listProjectConversations" | "renameProjectConversation" | "deleteProjectConversation">, projectId: string | null) => {
14
+ export declare const useProjectConversations: (client: Pick<ProjectsApiClient, "listProjectConversations" | "renameProjectConversation" | "deleteProjectConversation" | "markProjectConversationViewed">, projectId: string | null) => {
15
15
  retry: () => void;
16
16
  loadMore: () => Promise<void>;
17
17
  rename: (id: string, newTitle: string) => Promise<void>;
18
18
  remove: (id: string) => Promise<void>;
19
+ refresh: () => Promise<void>;
20
+ markViewed: (id: string) => void;
19
21
  items: ProjectConversationListItem[];
20
22
  isLoading: boolean;
21
23
  hasError: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"use-project-conversations.d.ts","sourceRoot":"","sources":["../../src/project/use-project-conversations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAE1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AA8B/D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,uBAAuB,GAClC,QAAQ,IAAI,CACV,iBAAiB,EACf,0BAA0B,GAC1B,2BAA2B,GAC3B,2BAA2B,CAC9B,EACD,WAAW,MAAM,GAAG,IAAI;;;iBA6EX,MAAM,YAAY,MAAM;iBAaxB,MAAM;WAvIZ,2BAA2B,EAAE;eACzB,OAAO;cACR,OAAO;IACjB,8CAA8C;aACrC,OAAO;IAChB,mCAAmC;mBACpB,OAAO;CA4IvB,CAAC"}
1
+ {"version":3,"file":"use-project-conversations.d.ts","sourceRoot":"","sources":["../../src/project/use-project-conversations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAE1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AA2D/D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,uBAAuB,GAClC,QAAQ,IAAI,CACV,iBAAiB,EACf,0BAA0B,GAC1B,2BAA2B,GAC3B,2BAA2B,GAC3B,+BAA+B,CAClC,EACD,WAAW,MAAM,GAAG,IAAI;;;iBAyKX,MAAM,YAAY,MAAM;iBAaxB,MAAM;;qBAlCZ,MAAM;WA/NN,2BAA2B,EAAE;eACzB,OAAO;cACR,OAAO;IACjB,8CAA8C;aACrC,OAAO;IAChB,mCAAmC;mBACpB,OAAO;CA8QvB,CAAC"}