@epam/ai-dial-chat-hooks 1.3.0-dev.165 → 1.3.0-dev.169
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/package.json +17 -17
- package/skill/skill-file-batch-validation.d.ts +4 -0
- package/skill/skill-file-batch-validation.d.ts.map +1 -1
- package/skill/skill-file-batch-validation.js +22 -22
- package/skill/useSkillEditorSubmit.d.ts +3 -1
- package/skill/useSkillEditorSubmit.d.ts.map +1 -1
- package/skill/useSkillEditorSubmit.js +77 -75
- package/skill/useSkillFileActions.d.ts +2 -0
- package/skill/useSkillFileActions.d.ts.map +1 -1
- package/skill/useSkillFileActions.js +36 -21
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.169",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./index.js",
|
|
@@ -121,8 +121,8 @@
|
|
|
121
121
|
}
|
|
122
122
|
},
|
|
123
123
|
"dependencies": {
|
|
124
|
-
"@epam/ai-dial-chat-api-client": "1.3.0-dev.
|
|
125
|
-
"dompurify": "3.4.
|
|
124
|
+
"@epam/ai-dial-chat-api-client": "1.3.0-dev.169",
|
|
125
|
+
"dompurify": "3.4.17",
|
|
126
126
|
"fflate": "^0.8.3",
|
|
127
127
|
"lru-cache": "^10.4.3",
|
|
128
128
|
"mime-types": "^3.0.2",
|
|
@@ -130,22 +130,22 @@
|
|
|
130
130
|
},
|
|
131
131
|
"peerDependencies": {
|
|
132
132
|
"react": "^19.2.8",
|
|
133
|
-
"@epam/ai-dial-attachment-canvas": "1.3.0-dev.
|
|
134
|
-
"@epam/ai-dial-attachment-input": "1.3.0-dev.
|
|
135
|
-
"@epam/ai-dial-catalog": "1.3.0-dev.
|
|
136
|
-
"@epam/ai-dial-chat-overlay": "1.3.0-dev.
|
|
137
|
-
"@epam/ai-dial-chat-shared": "1.3.0-dev.
|
|
138
|
-
"@epam/ai-dial-conversation-input": "1.3.0-dev.
|
|
139
|
-
"@epam/ai-dial-mcp-apps": "1.3.0-dev.
|
|
140
|
-
"@epam/ai-dial-publish-panel": "1.3.0-dev.
|
|
141
|
-
"@epam/ai-dial-quotations": "1.3.0-dev.
|
|
133
|
+
"@epam/ai-dial-attachment-canvas": "1.3.0-dev.169",
|
|
134
|
+
"@epam/ai-dial-attachment-input": "1.3.0-dev.169",
|
|
135
|
+
"@epam/ai-dial-catalog": "1.3.0-dev.169",
|
|
136
|
+
"@epam/ai-dial-chat-overlay": "1.3.0-dev.169",
|
|
137
|
+
"@epam/ai-dial-chat-shared": "1.3.0-dev.169",
|
|
138
|
+
"@epam/ai-dial-conversation-input": "1.3.0-dev.169",
|
|
139
|
+
"@epam/ai-dial-mcp-apps": "1.3.0-dev.169",
|
|
140
|
+
"@epam/ai-dial-publish-panel": "1.3.0-dev.169",
|
|
141
|
+
"@epam/ai-dial-quotations": "1.3.0-dev.169",
|
|
142
142
|
"@epam/ai-dial-react-file-manager": "^0.4.0-dev.11",
|
|
143
|
-
"@epam/ai-dial-scheduled-tasks": "1.3.0-dev.
|
|
144
|
-
"@epam/ai-dial-share": "1.3.0-dev.
|
|
145
|
-
"@epam/ai-dial-skill-editor": "1.3.0-dev.
|
|
146
|
-
"@epam/ai-dial-source-panel": "1.3.0-dev.
|
|
143
|
+
"@epam/ai-dial-scheduled-tasks": "1.3.0-dev.169",
|
|
144
|
+
"@epam/ai-dial-share": "1.3.0-dev.169",
|
|
145
|
+
"@epam/ai-dial-skill-editor": "1.3.0-dev.169",
|
|
146
|
+
"@epam/ai-dial-source-panel": "1.3.0-dev.169",
|
|
147
147
|
"@epam/ai-dial-ui-kit": "^0.16.0-dev.35",
|
|
148
|
-
"@epam/ai-dial-usage-dashboard": "1.3.0-dev.
|
|
148
|
+
"@epam/ai-dial-usage-dashboard": "1.3.0-dev.169",
|
|
149
149
|
"@modelcontextprotocol/sdk": "^1.32.1",
|
|
150
150
|
"@epam/pdf-highlighter-kit": "^0.0.19",
|
|
151
151
|
"@mcp-ui/client": "^7.1.1"
|
|
@@ -43,6 +43,10 @@ export interface SkillFileBatchValidationContext {
|
|
|
43
43
|
existingPaths: string[];
|
|
44
44
|
/** Sum of the bytes already held for existing supporting files. */
|
|
45
45
|
existingTotalBytes: number;
|
|
46
|
+
/** Bytes held for each existing supporting file, keyed by path; a replacing upload frees its target's share. Defaults to none. */
|
|
47
|
+
existingFileBytes?: ReadonlyMap<string, number>;
|
|
48
|
+
/** Paths of the folders in the tree; a file can never take one over, so a candidate at such a path is a duplicate. Defaults to none. */
|
|
49
|
+
existingFolderPaths?: string[];
|
|
46
50
|
/** UTF-8 byte length of the currently generated/loaded root `SKILL.md`. */
|
|
47
51
|
manifestByteLength: number;
|
|
48
52
|
/** Localized messages. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-file-batch-validation.d.ts","sourceRoot":"","sources":["../../src/skill/skill-file-batch-validation.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC/B,MAAM,4BAA4B,CAAC;AAUpC,+EAA+E;AAC/E,MAAM,WAAW,4BAA4B;IAC3C,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,4EAA4E;AAC5E,MAAM,WAAW,gCAAgC;IAC/C,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,YAAY,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,WAAW,EAAE,MAAM,CAAC;IACpB,sFAAsF;IACtF,aAAa,EAAE,MAAM,CAAC;IACtB,4FAA4F;IAC5F,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1C,yEAAyE;IACzE,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iEAAiE;IACjE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gEAAgE;IAChE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,6FAA6F;IAC7F,0BAA0B,EAAE,MAAM,CAAC;IACnC,6EAA6E;IAC7E,iBAAiB,EAAE,MAAM,CAAC;IAC1B,2EAA2E;IAC3E,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,gFAAgF;AAChF,MAAM,WAAW,+BAA+B;IAC9C,kEAAkE;IAClE,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,mEAAmE;IACnE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,2EAA2E;IAC3E,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0BAA0B;IAC1B,QAAQ,EAAE,gCAAgC,CAAC;CAC5C;AAED,iDAAiD;AACjD,MAAM,WAAW,+BAA+B;IAC9C,gEAAgE;IAChE,OAAO,EAAE,yBAAyB,EAAE,CAAC;IACrC,2EAA2E;IAC3E,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,4FAA4F;IAC5F,iBAAiB,CAAC,EAAE,4BAA4B,CAAC;CAClD;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,GACjC,YAAY,wBAAwB,EAAE,EACtC,SAAS,+BAA+B,KACvC,OAAO,CAAC,+BAA+B,
|
|
1
|
+
{"version":3,"file":"skill-file-batch-validation.d.ts","sourceRoot":"","sources":["../../src/skill/skill-file-batch-validation.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC/B,MAAM,4BAA4B,CAAC;AAUpC,+EAA+E;AAC/E,MAAM,WAAW,4BAA4B;IAC3C,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,4EAA4E;AAC5E,MAAM,WAAW,gCAAgC;IAC/C,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,YAAY,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,WAAW,EAAE,MAAM,CAAC;IACpB,sFAAsF;IACtF,aAAa,EAAE,MAAM,CAAC;IACtB,4FAA4F;IAC5F,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1C,yEAAyE;IACzE,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iEAAiE;IACjE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gEAAgE;IAChE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,6FAA6F;IAC7F,0BAA0B,EAAE,MAAM,CAAC;IACnC,6EAA6E;IAC7E,iBAAiB,EAAE,MAAM,CAAC;IAC1B,2EAA2E;IAC3E,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,gFAAgF;AAChF,MAAM,WAAW,+BAA+B;IAC9C,kEAAkE;IAClE,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,mEAAmE;IACnE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kIAAkI;IAClI,iBAAiB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,wIAAwI;IACxI,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,2EAA2E;IAC3E,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0BAA0B;IAC1B,QAAQ,EAAE,gCAAgC,CAAC;CAC5C;AAED,iDAAiD;AACjD,MAAM,WAAW,+BAA+B;IAC9C,gEAAgE;IAChE,OAAO,EAAE,yBAAyB,EAAE,CAAC;IACrC,2EAA2E;IAC3E,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,4FAA4F;IAC5F,iBAAiB,CAAC,EAAE,4BAA4B,CAAC;CAClD;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,GACjC,YAAY,wBAAwB,EAAE,EACtC,SAAS,+BAA+B,KACvC,OAAO,CAAC,+BAA+B,CAgJzC,CAAC"}
|
|
@@ -3,46 +3,46 @@ import { formatFileSize as r } from "@epam/ai-dial-chat-shared";
|
|
|
3
3
|
import { SkillFileCandidateKind as i, SkillFileValidationStatus as a } from "@epam/ai-dial-skill-editor";
|
|
4
4
|
//#region src/skill/skill-file-batch-validation.ts
|
|
5
5
|
var o = async (o, s) => {
|
|
6
|
-
let { existingPaths: c, existingTotalBytes: l,
|
|
7
|
-
for (let { path: e } of o) e !== "SKILL.md" &&
|
|
8
|
-
let
|
|
6
|
+
let { existingPaths: c, existingTotalBytes: l, existingFileBytes: u, existingFolderPaths: d, manifestByteLength: f, messages: p } = s, m = [], h = [], g = new Set(c), _ = new Set(d), v = /* @__PURE__ */ new Map();
|
|
7
|
+
for (let { path: e } of o) e !== "SKILL.md" && v.set(e, (v.get(e) ?? 0) + 1);
|
|
8
|
+
let y = 0, b = 0, x = /* @__PURE__ */ new Set(), S, C = f, w = 0;
|
|
9
9
|
for (let s of o) {
|
|
10
|
-
let { id: o, file: c, path: l } = s,
|
|
11
|
-
if (l.toLowerCase() === "skill.md" && l !== "SKILL.md")
|
|
10
|
+
let { id: o, file: c, path: l } = s, d = s.replacesExisting === !0 && g.has(l), f, h = i.SupportingFile;
|
|
11
|
+
if (l.toLowerCase() === "skill.md" && l !== "SKILL.md") f = p.manifestCasingInvalid;
|
|
12
12
|
else if (l === "SKILL.md") {
|
|
13
|
-
if (
|
|
13
|
+
if (h = i.Manifest, w += 1, c.size > 1048576) f = p.fileTooLarge(r(e));
|
|
14
14
|
else try {
|
|
15
15
|
let e = await c.text();
|
|
16
|
-
if (e.includes("�"))
|
|
16
|
+
if (e.includes("�")) f = p.manifestInvalidUtf8;
|
|
17
17
|
else {
|
|
18
18
|
let { frontmatter: t, instructions: r } = n(e), i = typeof t.name == "string" ? t.name : "", a = typeof t.description == "string" ? t.description : "";
|
|
19
|
-
!i.trim() || !a.trim() ?
|
|
19
|
+
!i.trim() || !a.trim() ? f = p.manifestInvalidFrontmatter : w === 1 && (S = {
|
|
20
20
|
candidateId: o,
|
|
21
21
|
name: i,
|
|
22
22
|
description: a,
|
|
23
23
|
frontmatter: t,
|
|
24
24
|
instructions: r
|
|
25
|
-
},
|
|
25
|
+
}, C = c.size);
|
|
26
26
|
}
|
|
27
27
|
} catch {
|
|
28
|
-
|
|
28
|
+
f = p.manifestInvalidFrontmatter;
|
|
29
29
|
}
|
|
30
|
-
} else l ? t(l) ?
|
|
31
|
-
!
|
|
30
|
+
} else l ? t(l) ? g.has(l) && !d || _.has(l) || (v.get(l) ?? 0) > 1 ? f = p.pathDuplicate : c.size > 1048576 && (f = p.fileTooLarge(r(e))) : f = p.pathInvalid : f = p.required;
|
|
31
|
+
!f && h === i.SupportingFile && (x.add(l), y += c.size, d && (b += u?.get(l) ?? 0)), m.push({
|
|
32
32
|
candidateId: o,
|
|
33
|
-
status:
|
|
34
|
-
kind:
|
|
35
|
-
error:
|
|
33
|
+
status: f ? a.Invalid : a.Valid,
|
|
34
|
+
kind: h,
|
|
35
|
+
error: f
|
|
36
36
|
});
|
|
37
37
|
}
|
|
38
|
-
if (
|
|
39
|
-
|
|
40
|
-
for (let e of
|
|
38
|
+
if (w > 1) {
|
|
39
|
+
h.push({ message: p.manifestDuplicate }), S = void 0, C = f;
|
|
40
|
+
for (let e of m) e.kind === i.Manifest && !e.error && (e.status = a.Invalid, e.error = p.manifestDuplicate);
|
|
41
41
|
}
|
|
42
|
-
return l
|
|
43
|
-
results:
|
|
44
|
-
batchErrors:
|
|
45
|
-
manifestCandidate:
|
|
42
|
+
return l - b + y + C > 16777216 && h.push({ message: p.totalSizeExceeded }), (/* @__PURE__ */ new Set([...g, ...x])).size + 1 > 100 && h.push({ message: p.totalCountExceeded }), {
|
|
43
|
+
results: m,
|
|
44
|
+
batchErrors: h,
|
|
45
|
+
manifestCandidate: S
|
|
46
46
|
};
|
|
47
47
|
};
|
|
48
48
|
//#endregion
|
|
@@ -66,6 +66,8 @@ export interface UseSkillEditorSubmitParams {
|
|
|
66
66
|
files: SkillFileTreeNode[];
|
|
67
67
|
/** In-memory bytes for every supporting file, keyed by relative path. */
|
|
68
68
|
filesContentRef: React.MutableRefObject<Map<string, SkillFileContent>>;
|
|
69
|
+
/** `useSkillFileActions`'s `contentRevisions`; a replaced file's new bytes must not reuse a cached retry payload. Defaults to none. */
|
|
70
|
+
contentRevisions?: Readonly<Record<string, number>>;
|
|
69
71
|
/** The loaded (or imported) manifest's full parsed frontmatter. */
|
|
70
72
|
frontmatterRef: React.MutableRefObject<Record<string, unknown>>;
|
|
71
73
|
/** The path the currently loaded edit-mode state belongs to. */
|
|
@@ -120,6 +122,6 @@ export interface UseSkillEditorSubmitResult {
|
|
|
120
122
|
* `client.createSkill`/`client.updateSkill`, and mapping the resulting
|
|
121
123
|
* success/error/conflict outcomes to presentable state.
|
|
122
124
|
*/
|
|
123
|
-
export declare const useSkillEditorSubmit: ({ bucket, isEditMode, files, filesContentRef, frontmatterRef, loadedPathRef, etagRef, returnUrl, getCreateReturnUrl, refetchSkills, client, messages, onNavigate, onNotify, }: UseSkillEditorSubmitParams) => UseSkillEditorSubmitResult;
|
|
125
|
+
export declare const useSkillEditorSubmit: ({ bucket, isEditMode, files, filesContentRef, contentRevisions, frontmatterRef, loadedPathRef, etagRef, returnUrl, getCreateReturnUrl, refetchSkills, client, messages, onNavigate, onNotify, }: UseSkillEditorSubmitParams) => UseSkillEditorSubmitResult;
|
|
124
126
|
export {};
|
|
125
127
|
//# sourceMappingURL=useSkillEditorSubmit.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSkillEditorSubmit.d.ts","sourceRoot":"","sources":["../../src/skill/useSkillEditorSubmit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAa3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAQ7D,KAAK,WAAW,GAAG,MAAM,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"useSkillEditorSubmit.d.ts","sourceRoot":"","sources":["../../src/skill/useSkillEditorSubmit.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,153 +3,155 @@ import { SKILL_TEXT_FIELD_MAX_LENGTHS as n, buildSkillFilesPayload as r, buildSk
|
|
|
3
3
|
import { useCallback as l, useRef as u, useState as d } from "react";
|
|
4
4
|
import { NotificationVariant as f } from "@epam/ai-dial-ui-kit";
|
|
5
5
|
//#region src/skill/useSkillEditorSubmit.ts
|
|
6
|
-
var p = (e, t) => JSON.stringify({
|
|
6
|
+
var p = (e, t, n) => JSON.stringify({
|
|
7
7
|
values: e,
|
|
8
|
-
files: [...t].sort((e, t) => e.path.localeCompare(t.path))
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
files: [...t].sort((e, t) => e.path.localeCompare(t.path)),
|
|
9
|
+
contentRevisions: Object.entries(n).sort(([e], [t]) => e.localeCompare(t))
|
|
10
|
+
}), m = {}, h = ({ bucket: h, isEditMode: g, files: _, filesContentRef: v, contentRevisions: y = m, frontmatterRef: b, loadedPathRef: x, etagRef: S, returnUrl: C, getCreateReturnUrl: w, refetchSkills: T, client: E, messages: D, onNavigate: O, onNotify: k }) => {
|
|
11
|
+
let [A, j] = d({}), [M, N] = d(), [P, F] = d(!1), [I, L] = d(), [R, z] = d("idle"), B = u(null), V = u(null), H = l(async (n) => {
|
|
11
12
|
switch (t(n)) {
|
|
12
13
|
case 409:
|
|
13
|
-
|
|
14
|
+
j({ name: D.nameConflict });
|
|
14
15
|
return;
|
|
15
16
|
case 412:
|
|
16
|
-
|
|
17
|
+
j({ name: D.nameConflict });
|
|
17
18
|
return;
|
|
18
19
|
case 413:
|
|
19
|
-
|
|
20
|
+
N(D.archiveTooLarge);
|
|
20
21
|
return;
|
|
21
22
|
case 503:
|
|
22
|
-
|
|
23
|
+
N(D.serviceUnavailable), F(!0);
|
|
23
24
|
return;
|
|
24
25
|
case 400: {
|
|
25
26
|
let { message: t } = await e(n);
|
|
26
|
-
|
|
27
|
+
N(t ?? D.pathInvalid);
|
|
27
28
|
return;
|
|
28
29
|
}
|
|
29
30
|
default: {
|
|
30
31
|
let { traceId: t } = await e(n);
|
|
31
|
-
|
|
32
|
+
N(D.saveError), k({
|
|
32
33
|
variant: f.Error,
|
|
33
|
-
message:
|
|
34
|
+
message: D.saveError,
|
|
34
35
|
requestId: t
|
|
35
36
|
});
|
|
36
37
|
}
|
|
37
38
|
}
|
|
38
|
-
}, [
|
|
39
|
+
}, [D, k]), U = l(async (e) => {
|
|
39
40
|
let t = s(e.name);
|
|
40
41
|
if (!t || !o(t)) {
|
|
41
|
-
|
|
42
|
+
j({ name: D.nameInvalid });
|
|
42
43
|
return;
|
|
43
44
|
}
|
|
44
|
-
let n = p(e,
|
|
45
|
-
c ? {skillManifest: u, filePaths: d, files:
|
|
45
|
+
let n = p(e, _, y), a = B.current, c = a != null && a.fingerprint === n, l = t, u, d, m;
|
|
46
|
+
c ? {skillManifest: u, filePaths: d, files: m} = a : (u = i(b.current, t, e.description, e.instructions), {filePaths: d, files: m} = r(_, v.current)), z("submitting"), B.current = {
|
|
46
47
|
fingerprint: n,
|
|
47
|
-
bucket:
|
|
48
|
+
bucket: h,
|
|
48
49
|
path: l,
|
|
49
50
|
skillManifest: u,
|
|
50
51
|
filePaths: d,
|
|
51
|
-
files:
|
|
52
|
+
files: m
|
|
52
53
|
};
|
|
53
54
|
try {
|
|
54
|
-
await
|
|
55
|
+
await E.createSkill(h, l, u, d, m), await T(), z("success"), k({
|
|
55
56
|
variant: f.Success,
|
|
56
|
-
title:
|
|
57
|
-
message:
|
|
58
|
-
}),
|
|
57
|
+
title: D.saveSuccessTitle,
|
|
58
|
+
message: D.createSuccess(t)
|
|
59
|
+
}), O(w?.(l) ?? C);
|
|
59
60
|
} catch (e) {
|
|
60
|
-
|
|
61
|
+
z("failure"), await H(e);
|
|
61
62
|
}
|
|
62
63
|
}, [
|
|
63
|
-
|
|
64
|
-
g,
|
|
64
|
+
h,
|
|
65
65
|
_,
|
|
66
66
|
v,
|
|
67
|
-
|
|
68
|
-
|
|
67
|
+
y,
|
|
68
|
+
b,
|
|
69
69
|
D,
|
|
70
70
|
E,
|
|
71
|
-
|
|
72
|
-
|
|
71
|
+
k,
|
|
72
|
+
O,
|
|
73
73
|
C,
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
w,
|
|
75
|
+
T,
|
|
76
|
+
H
|
|
77
|
+
]), W = l(async (e) => {
|
|
78
|
+
let n = x.current, a = S.current;
|
|
77
79
|
if (!n || !a) {
|
|
78
|
-
|
|
80
|
+
N(D.saveError);
|
|
79
81
|
return;
|
|
80
82
|
}
|
|
81
|
-
let o = i(
|
|
82
|
-
|
|
83
|
+
let o = i(b.current, e.name, e.description, e.instructions), { filePaths: s, files: c } = r(_, v.current);
|
|
84
|
+
z("submitting");
|
|
83
85
|
try {
|
|
84
|
-
|
|
86
|
+
S.current = (await E.updateSkill(h, n, o, s, c, a)).etag ?? a, await T(), z("success"), k({
|
|
85
87
|
variant: f.Success,
|
|
86
|
-
title:
|
|
87
|
-
message:
|
|
88
|
-
}),
|
|
88
|
+
title: D.updateSuccessTitle,
|
|
89
|
+
message: D.updateSuccess(e.name)
|
|
90
|
+
}), O(C);
|
|
89
91
|
} catch (e) {
|
|
90
|
-
if (
|
|
91
|
-
|
|
92
|
+
if (z("failure"), t(e) === 412) {
|
|
93
|
+
L({ message: D.conflictMessage });
|
|
92
94
|
return;
|
|
93
95
|
}
|
|
94
|
-
await
|
|
96
|
+
await H(e);
|
|
95
97
|
}
|
|
96
98
|
}, [
|
|
97
|
-
|
|
98
|
-
g,
|
|
99
|
+
h,
|
|
99
100
|
_,
|
|
100
101
|
v,
|
|
101
|
-
y,
|
|
102
102
|
b,
|
|
103
|
-
|
|
104
|
-
|
|
103
|
+
x,
|
|
104
|
+
S,
|
|
105
105
|
D,
|
|
106
106
|
E,
|
|
107
|
-
|
|
107
|
+
k,
|
|
108
|
+
O,
|
|
108
109
|
C,
|
|
109
|
-
|
|
110
|
-
|
|
110
|
+
T,
|
|
111
|
+
H
|
|
112
|
+
]), G = l((e) => {
|
|
111
113
|
let t = c(e.instructions), r = a(e);
|
|
112
|
-
|
|
114
|
+
j((e) => {
|
|
113
115
|
let i = { ...e };
|
|
114
116
|
for (let e of Object.keys(n)) {
|
|
115
|
-
let t =
|
|
117
|
+
let t = D.tooLong(n[e]);
|
|
116
118
|
r[e] ? i[e] = t : i[e] === t && delete i[e];
|
|
117
119
|
}
|
|
118
120
|
if (!r.instructions) {
|
|
119
|
-
let e = i.instructions ===
|
|
120
|
-
t && !e ? i.instructions =
|
|
121
|
+
let e = i.instructions === D.instructionsFrontmatter;
|
|
122
|
+
t && !e ? i.instructions = D.instructionsFrontmatter : !t && e && delete i.instructions;
|
|
121
123
|
}
|
|
122
124
|
return Object.keys(i).length === Object.keys(e).length && Object.keys(i).every((t) => i[t] === e[t]) ? e : i;
|
|
123
125
|
});
|
|
124
|
-
}, [
|
|
125
|
-
if (
|
|
126
|
+
}, [D]), K = l(async (e) => {
|
|
127
|
+
if (R === "submitting" || !h) return;
|
|
126
128
|
let t = {};
|
|
127
|
-
e.name.trim() || (t.name =
|
|
129
|
+
e.name.trim() || (t.name = D.required), e.description.trim() || (t.description = D.required), e.instructions.trim() ? c(e.instructions) && (t.instructions = D.instructionsFrontmatter) : t.instructions = D.required;
|
|
128
130
|
let r = a(e);
|
|
129
|
-
for (let e of Object.keys(r)) t[e] ??=
|
|
130
|
-
Object.keys(t).length > 0 ?
|
|
131
|
+
for (let e of Object.keys(r)) t[e] ??= D.tooLong(n[e]);
|
|
132
|
+
Object.keys(t).length > 0 ? j(t) : (j({}), N(void 0), F(!1), L(void 0), V.current = e, g ? await W(e) : await U(e));
|
|
131
133
|
}, [
|
|
132
|
-
|
|
133
|
-
m,
|
|
134
|
-
T,
|
|
134
|
+
R,
|
|
135
135
|
h,
|
|
136
|
-
|
|
137
|
-
|
|
136
|
+
D,
|
|
137
|
+
g,
|
|
138
|
+
W,
|
|
139
|
+
U
|
|
138
140
|
]);
|
|
139
141
|
return {
|
|
140
|
-
phase:
|
|
141
|
-
errors:
|
|
142
|
-
submitError:
|
|
143
|
-
isSubmitErrorRetryable:
|
|
142
|
+
phase: R,
|
|
143
|
+
errors: A,
|
|
144
|
+
submitError: M,
|
|
145
|
+
isSubmitErrorRetryable: P,
|
|
144
146
|
retrySubmit: l(() => {
|
|
145
|
-
let e =
|
|
146
|
-
e != null &&
|
|
147
|
-
}, [
|
|
148
|
-
conflict:
|
|
149
|
-
clearConflict: () =>
|
|
150
|
-
handleSubmit:
|
|
151
|
-
handleValuesChange:
|
|
147
|
+
let e = V.current;
|
|
148
|
+
e != null && K(e);
|
|
149
|
+
}, [K]),
|
|
150
|
+
conflict: I,
|
|
151
|
+
clearConflict: () => L(void 0),
|
|
152
|
+
handleSubmit: K,
|
|
153
|
+
handleValuesChange: G
|
|
152
154
|
};
|
|
153
155
|
};
|
|
154
156
|
//#endregion
|
|
155
|
-
export {
|
|
157
|
+
export { h as useSkillEditorSubmit };
|
|
@@ -48,6 +48,8 @@ export interface UseSkillFileActionsResult {
|
|
|
48
48
|
pendingManifestImport: boolean;
|
|
49
49
|
/** Resolves the in-flight manifest-import confirmation with the user's choice. */
|
|
50
50
|
resolveManifestImport: (accepted: boolean) => void;
|
|
51
|
+
/** How many times each supporting file's bytes were replaced in place, keyed by path; absent means never. */
|
|
52
|
+
contentRevisions: Readonly<Record<string, number>>;
|
|
51
53
|
}
|
|
52
54
|
/**
|
|
53
55
|
* Owns the Skill Editor's batch file upload workflow: validating a staged
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSkillFileActions.d.ts","sourceRoot":"","sources":["../../src/skill/useSkillFileActions.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EAEvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAUtD,OAAO,EAEL,KAAK,gCAAgC,EACtC,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,4FAA4F;AAC5F,MAAM,WAAW,wBAAyB,SAAQ,gCAAgC;IAChF,4GAA4G;IAC5G,oBAAoB,EAAE,MAAM,CAAC;IAC7B,4FAA4F;IAC5F,sBAAsB,EAAE,MAAM,CAAC;IAC/B,qGAAqG;IACrG,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,0DAA0D;AAC1D,MAAM,WAAW,yBAAyB;IACxC,iDAAiD;IACjD,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,uBAAuB;IACvB,QAAQ,EAAE,QAAQ,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;IACxD,yEAAyE;IACzE,eAAe,EAAE,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACvE,mEAAmE;IACnE,cAAc,EAAE,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAChE,yFAAyF;IACzF,YAAY,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC5C,sDAAsD;IACtD,eAAe,EAAE,QAAQ,CAAC,cAAc,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAAC,CAAC;IACzE,oFAAoF;IACpF,UAAU,EAAE,OAAO,CAAC;IACpB,oEAAoE;IACpE,OAAO,EAAE,OAAO,CAAC;IACjB,0DAA0D;IAC1D,eAAe,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAClD,gDAAgD;IAChD,QAAQ,EAAE,wBAAwB,CAAC;IACnC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAC,oBAAoB,EAAE,GAAG,SAAS,CAAC,CAAC;CACxE;AAED,mDAAmD;AACnD,MAAM,WAAW,yBAAyB;IACxC,4FAA4F;IAC5F,WAAW,EAAE,sBAAsB,CAAC;IACpC,iFAAiF;IACjF,qBAAqB,EAAE,OAAO,CAAC;IAC/B,kFAAkF;IAClF,qBAAqB,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;CACpD;AAQD;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAAI,0JAYjC,yBAAyB,KAAG,
|
|
1
|
+
{"version":3,"file":"useSkillFileActions.d.ts","sourceRoot":"","sources":["../../src/skill/useSkillFileActions.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EAEvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAUtD,OAAO,EAEL,KAAK,gCAAgC,EACtC,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,4FAA4F;AAC5F,MAAM,WAAW,wBAAyB,SAAQ,gCAAgC;IAChF,4GAA4G;IAC5G,oBAAoB,EAAE,MAAM,CAAC;IAC7B,4FAA4F;IAC5F,sBAAsB,EAAE,MAAM,CAAC;IAC/B,qGAAqG;IACrG,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,0DAA0D;AAC1D,MAAM,WAAW,yBAAyB;IACxC,iDAAiD;IACjD,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,uBAAuB;IACvB,QAAQ,EAAE,QAAQ,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;IACxD,yEAAyE;IACzE,eAAe,EAAE,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACvE,mEAAmE;IACnE,cAAc,EAAE,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAChE,yFAAyF;IACzF,YAAY,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC5C,sDAAsD;IACtD,eAAe,EAAE,QAAQ,CAAC,cAAc,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAAC,CAAC;IACzE,oFAAoF;IACpF,UAAU,EAAE,OAAO,CAAC;IACpB,oEAAoE;IACpE,OAAO,EAAE,OAAO,CAAC;IACjB,0DAA0D;IAC1D,eAAe,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAClD,gDAAgD;IAChD,QAAQ,EAAE,wBAAwB,CAAC;IACnC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAC,oBAAoB,EAAE,GAAG,SAAS,CAAC,CAAC;CACxE;AAED,mDAAmD;AACnD,MAAM,WAAW,yBAAyB;IACxC,4FAA4F;IAC5F,WAAW,EAAE,sBAAsB,CAAC;IACpC,iFAAiF;IACjF,qBAAqB,EAAE,OAAO,CAAC;IAC/B,kFAAkF;IAClF,qBAAqB,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD,6GAA6G;IAC7G,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACpD;AAQD;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAAI,0JAYjC,yBAAyB,KAAG,yBA+O9B,CAAC"}
|
|
@@ -6,18 +6,23 @@ import { useCallback as c, useMemo as l, useRef as u, useState as d } from "reac
|
|
|
6
6
|
import { SkillFileNodeKind as f } from "@epam/ai-dial-skill-editor";
|
|
7
7
|
//#region src/skill/useSkillFileActions.ts
|
|
8
8
|
var p = "probe", m = ({ files: m, setFiles: h, filesContentRef: g, frontmatterRef: _, loadedValues: v, setLoadedValues: y, isEditMode: b, isDirty: x, setSelectedPath: S, messages: C, pickFromFileSystem: w }) => {
|
|
9
|
-
let [T, E] = d(!1), D = u(null),
|
|
10
|
-
let e = m.filter((e) => e.kind === f.File).map((e) => e.path), r = 0;
|
|
11
|
-
for (let t of e)
|
|
12
|
-
|
|
9
|
+
let [T, E] = d(!1), [D, O] = d({}), k = u(null), A = c(() => {
|
|
10
|
+
let e = m.filter((e) => e.kind === f.File).map((e) => e.path), r = 0, i = /* @__PURE__ */ new Map();
|
|
11
|
+
for (let t of e) {
|
|
12
|
+
let e = g.current.get(t)?.bytes.length ?? 0;
|
|
13
|
+
i.set(t, e), r += e;
|
|
14
|
+
}
|
|
15
|
+
let a = {
|
|
13
16
|
name: v?.name ?? "",
|
|
14
17
|
description: v?.description ?? "",
|
|
15
18
|
instructions: v?.instructions ?? ""
|
|
16
|
-
},
|
|
19
|
+
}, o = b ? n(_.current, a.name, a.description, a.instructions) : t(a);
|
|
17
20
|
return {
|
|
18
21
|
existingPaths: e,
|
|
19
22
|
existingTotalBytes: r,
|
|
20
|
-
|
|
23
|
+
existingFileBytes: i,
|
|
24
|
+
existingFolderPaths: m.filter((e) => e.kind === f.Folder).map((e) => e.path),
|
|
25
|
+
manifestByteLength: s(o),
|
|
21
26
|
messages: C
|
|
22
27
|
};
|
|
23
28
|
}, [
|
|
@@ -27,42 +32,50 @@ var p = "probe", m = ({ files: m, setFiles: h, filesContentRef: g, frontmatterRe
|
|
|
27
32
|
_,
|
|
28
33
|
v,
|
|
29
34
|
C
|
|
30
|
-
]),
|
|
31
|
-
|
|
32
|
-
}), []),
|
|
33
|
-
E(!1),
|
|
35
|
+
]), j = c(() => new Promise((e) => {
|
|
36
|
+
k.current = e, E(!0);
|
|
37
|
+
}), []), M = c((e) => {
|
|
38
|
+
E(!1), k.current?.(e), k.current = null;
|
|
34
39
|
}, []);
|
|
35
40
|
return {
|
|
36
41
|
fileActions: l(() => ({
|
|
37
42
|
validateBatch: async (e) => {
|
|
38
|
-
let { results: t, batchErrors: n } = await a(e,
|
|
43
|
+
let { results: t, batchErrors: n } = await a(e, A());
|
|
39
44
|
return {
|
|
40
45
|
results: t,
|
|
41
46
|
batchErrors: n
|
|
42
47
|
};
|
|
43
48
|
},
|
|
44
49
|
commitBatch: async (e) => {
|
|
45
|
-
let { results: t, batchErrors: n, manifestCandidate: r } = await a(e,
|
|
50
|
+
let { results: t, batchErrors: n, manifestCandidate: r } = await a(e, A());
|
|
46
51
|
if (t.some((e) => e.error !== void 0) || n.length > 0) return { error: n[0]?.message ?? C.saveError };
|
|
47
52
|
if (r) {
|
|
48
53
|
if (b && r.name !== (v?.name ?? "")) return { error: C.manifestNameMismatch };
|
|
49
|
-
if ((b || x) && !await
|
|
54
|
+
if ((b || x) && !await j()) return { error: C.manifestImportDeclined };
|
|
50
55
|
}
|
|
51
56
|
try {
|
|
52
|
-
let t = e.filter((e) => e.id !== r?.candidateId), n = await Promise.all(t.map(async (e) => ({
|
|
57
|
+
let t = e.filter((e) => e.id !== r?.candidateId), n = new Set(m.filter((e) => e.kind === f.File).map((e) => e.path)), a = await Promise.all(t.map(async (e) => ({
|
|
53
58
|
path: e.path,
|
|
54
59
|
bytes: new Uint8Array(await e.file.arrayBuffer()),
|
|
55
|
-
mimeType: e.file.type || void 0
|
|
60
|
+
mimeType: e.file.type || void 0,
|
|
61
|
+
isReplacement: n.has(e.path)
|
|
56
62
|
})));
|
|
57
|
-
for (let e of
|
|
63
|
+
for (let e of a) g.current.set(e.path, {
|
|
58
64
|
bytes: e.bytes,
|
|
59
65
|
mimeType: e.mimeType
|
|
60
66
|
});
|
|
61
|
-
|
|
67
|
+
let o = a.filter((e) => !e.isReplacement);
|
|
68
|
+
o.length > 0 && h((e) => [...e, ...o.map((e) => ({
|
|
62
69
|
path: e.path,
|
|
63
70
|
name: i(e.path),
|
|
64
71
|
kind: f.File
|
|
65
|
-
}))])
|
|
72
|
+
}))]);
|
|
73
|
+
let s = a.filter((e) => e.isReplacement).map((e) => e.path);
|
|
74
|
+
return s.length > 0 && O((e) => {
|
|
75
|
+
let t = { ...e };
|
|
76
|
+
for (let e of s) t[e] = (t[e] ?? 0) + 1;
|
|
77
|
+
return t;
|
|
78
|
+
}), r && (_.current = b ? {
|
|
66
79
|
..._.current,
|
|
67
80
|
...r.frontmatter
|
|
68
81
|
} : r.frontmatter, y({
|
|
@@ -90,11 +103,12 @@ var p = "probe", m = ({ files: m, setFiles: h, filesContentRef: g, frontmatterRe
|
|
|
90
103
|
extractArchive: o,
|
|
91
104
|
pickFromFileSystem: w
|
|
92
105
|
}), [
|
|
93
|
-
|
|
106
|
+
A,
|
|
107
|
+
m,
|
|
94
108
|
b,
|
|
95
109
|
x,
|
|
96
110
|
v,
|
|
97
|
-
|
|
111
|
+
j,
|
|
98
112
|
g,
|
|
99
113
|
_,
|
|
100
114
|
h,
|
|
@@ -104,7 +118,8 @@ var p = "probe", m = ({ files: m, setFiles: h, filesContentRef: g, frontmatterRe
|
|
|
104
118
|
w
|
|
105
119
|
]),
|
|
106
120
|
pendingManifestImport: T,
|
|
107
|
-
resolveManifestImport:
|
|
121
|
+
resolveManifestImport: M,
|
|
122
|
+
contentRevisions: D
|
|
108
123
|
};
|
|
109
124
|
};
|
|
110
125
|
//#endregion
|