@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.
- package/api-error/api-error.d.ts +2 -0
- package/api-error/api-error.d.ts.map +1 -1
- package/api-error/api-error.js +31 -23
- package/catalog/map-skill-to-catalog-item.js +19 -19
- package/catalog/useCatalogEditNavigation/useCatalogEditNavigation.d.ts +2 -4
- package/catalog/useCatalogEditNavigation/useCatalogEditNavigation.d.ts.map +1 -1
- package/catalog/useCatalogEditNavigation/useCatalogEditNavigation.js +94 -112
- package/catalog/useCatalogItemDelete/useCatalogItemDelete.d.ts +41 -0
- package/catalog/useCatalogItemDelete/useCatalogItemDelete.d.ts.map +1 -0
- package/catalog/useCatalogItemDelete/useCatalogItemDelete.js +37 -0
- package/catalog/usePublishFolders/usePublishFolders.d.ts +8 -0
- package/catalog/usePublishFolders/usePublishFolders.d.ts.map +1 -1
- package/catalog/usePublishFolders/usePublishFolders.js +32 -29
- package/catalog.js +11 -10
- package/conversation/conversation-title-stream.d.ts +33 -0
- package/conversation/conversation-title-stream.d.ts.map +1 -0
- package/conversation/conversation-title-stream.js +103 -0
- package/conversation/useConversationExport/useConversationExport.js +46 -46
- package/conversation/useConversationHandlers/useConversationHandlers.js +39 -39
- package/conversation/useConversationStream/useConversationStream.js +93 -93
- package/conversation.js +5 -4
- package/entry-points/catalog.d.ts +1 -0
- package/entry-points/catalog.d.ts.map +1 -1
- package/entry-points/conversation.d.ts +1 -0
- package/entry-points/conversation.d.ts.map +1 -1
- package/entry-points/project.d.ts +3 -0
- package/entry-points/project.d.ts.map +1 -1
- package/files/dial-file-manager-copy-move.util.js +16 -16
- package/files/dial-file-manager-mapping.util.js +17 -17
- package/files/useDialFileListing/useDialFileListing.js +113 -113
- package/files/useDialFileMutations/useDialFileMutations.js +47 -47
- package/index.d.ts +5 -0
- package/index.d.ts.map +1 -1
- package/index.js +213 -208
- package/oauth/useToolsetLogin/useToolsetLogin.d.ts +7 -1
- package/oauth/useToolsetLogin/useToolsetLogin.d.ts.map +1 -1
- package/oauth/useToolsetLogin/useToolsetLogin.js +40 -21
- package/offline-credentials/useOfflineCredentialsGate/useOfflineCredentialsGate.js +10 -10
- package/package.json +18 -18
- package/project/project-events.d.ts +2 -2
- package/project/project-events.d.ts.map +1 -1
- package/project/project-events.js +3 -2
- package/project/project-mapping.js +12 -12
- package/project/project-refresh.d.ts +12 -0
- package/project/project-refresh.d.ts.map +1 -0
- package/project/project-refresh.js +6 -0
- package/project/project-watch-stream.d.ts +26 -0
- package/project/project-watch-stream.d.ts.map +1 -0
- package/project/project-watch-stream.js +39 -0
- package/project/projects-api-client.d.ts +6 -0
- package/project/projects-api-client.d.ts.map +1 -1
- package/project/projects-api-client.js +1 -0
- package/project/use-project-actions.js +12 -12
- package/project/use-project-conversations.d.ts +8 -6
- package/project/use-project-conversations.d.ts.map +1 -1
- package/project/use-project-conversations.js +129 -56
- package/project/use-project-watch.d.ts +24 -0
- package/project/use-project-watch.d.ts.map +1 -0
- package/project/use-project-watch.js +41 -0
- package/project/use-project.d.ts +4 -1
- package/project/use-project.d.ts.map +1 -1
- package/project/use-project.js +47 -22
- package/project/use-projects.d.ts.map +1 -1
- package/project/use-projects.js +49 -68
- package/project.js +8 -5
- package/prompt/prompt.d.ts +11 -0
- package/prompt/prompt.d.ts.map +1 -1
- package/prompt/prompt.js +7 -3
- package/scheduled-task/use-scheduled-task-runs.js +13 -13
- package/shared/serialized-writer.d.ts +10 -0
- package/shared/serialized-writer.d.ts.map +1 -0
- package/shared/serialized-writer.js +35 -0
- package/usage/map-user-usage-to-model-limits.js +21 -21
- package/useShareLink/useShareLink.js +18 -18
- 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;
|
|
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
|
|
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]),
|
|
20
|
-
let { toolsetId: p, credentialsLevel: m, oauthSettings:
|
|
21
|
-
clientId:
|
|
22
|
-
authorizationEndpoint:
|
|
23
|
-
scopes:
|
|
24
|
-
codeChallenge:
|
|
25
|
-
codeChallengeMethod:
|
|
26
|
-
},
|
|
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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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 (
|
|
55
|
+
if (C.type === i.Success) return o({
|
|
38
56
|
toolsetId: p,
|
|
39
57
|
credentialsLevel: m
|
|
40
58
|
}), { type: "success" };
|
|
41
|
-
if (
|
|
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
|
-
]),
|
|
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
|
|
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,
|
|
71
|
-
return { login: d((e) => e.authenticationType === n.OAuth ?
|
|
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 {
|
|
3
|
-
import {
|
|
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] =
|
|
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
|
|
11
|
-
h.current =
|
|
10
|
+
let n = new AbortController();
|
|
11
|
+
h.current = n, c("checking");
|
|
12
12
|
try {
|
|
13
|
-
let
|
|
14
|
-
if (
|
|
15
|
-
let { available: r, connected: i, connect: a, schedulerServiceConsent: s } = e(
|
|
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
|
|
23
|
+
return n.signal.aborted || (c("error"), u(void 0), m(t.Unknown)), null;
|
|
24
24
|
}
|
|
25
25
|
}, [o]);
|
|
26
|
-
return
|
|
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.
|
|
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.
|
|
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.
|
|
144
|
-
"@epam/ai-dial-attachment-input": "1.3.0-dev.
|
|
145
|
-
"@epam/ai-dial-catalog": "1.3.0-dev.
|
|
146
|
-
"@epam/ai-dial-chat-overlay": "1.3.0-dev.
|
|
147
|
-
"@epam/ai-dial-chat-shared": "1.3.0-dev.
|
|
148
|
-
"@epam/ai-dial-conversation-input": "1.3.0-dev.
|
|
149
|
-
"@epam/ai-dial-mcp-apps": "1.3.0-dev.
|
|
150
|
-
"@epam/ai-dial-projects": "1.3.0-dev.
|
|
151
|
-
"@epam/ai-dial-publish-panel": "1.3.0-dev.
|
|
152
|
-
"@epam/ai-dial-quotations": "1.3.0-dev.
|
|
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.
|
|
155
|
-
"@epam/ai-dial-share": "1.3.0-dev.
|
|
156
|
-
"@epam/ai-dial-skill-editor": "1.3.0-dev.
|
|
157
|
-
"@epam/ai-dial-source-panel": "1.3.0-dev.
|
|
158
|
-
"@epam/ai-dial-ui-kit": "^0.16.0-dev.
|
|
159
|
-
"@epam/ai-dial-usage-dashboard": "1.3.0-dev.
|
|
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
|
|
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,
|
|
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 {
|
|
2
|
-
import {
|
|
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
|
-
[
|
|
7
|
-
[
|
|
8
|
-
[
|
|
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:
|
|
21
|
+
contentType: r(e) ?? a
|
|
22
22
|
}))
|
|
23
|
-
}), u = (
|
|
24
|
-
let o =
|
|
23
|
+
}), u = (e) => e.contextFiles.map(({ name: e, size: i }) => {
|
|
24
|
+
let o = r(e) ?? a;
|
|
25
25
|
return {
|
|
26
|
-
id: `stored:${
|
|
27
|
-
name:
|
|
26
|
+
id: `stored:${e}`,
|
|
27
|
+
name: e,
|
|
28
28
|
size: i,
|
|
29
29
|
contentType: o,
|
|
30
|
-
type:
|
|
31
|
-
status:
|
|
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,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 {
|
|
4
|
-
import {
|
|
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] =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
41
|
+
]), w = r(() => v(!0), []), T = r(() => {
|
|
42
42
|
y || v(!1);
|
|
43
|
-
}, [y]), E =
|
|
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:
|
|
50
|
-
if (
|
|
51
|
-
v(!1), p("changed-elsewhere",
|
|
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",
|
|
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
|
|
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:
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* changes or the view unmounts.
|
|
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;
|
|
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"}
|