@epam/ai-dial-chat-hooks 1.3.0-dev.165 → 1.3.0-dev.170

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 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.165",
4
+ "version": "1.3.0-dev.170",
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.165",
125
- "dompurify": "3.4.16",
124
+ "@epam/ai-dial-chat-api-client": "1.3.0-dev.170",
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.165",
134
- "@epam/ai-dial-attachment-input": "1.3.0-dev.165",
135
- "@epam/ai-dial-catalog": "1.3.0-dev.165",
136
- "@epam/ai-dial-chat-overlay": "1.3.0-dev.165",
137
- "@epam/ai-dial-chat-shared": "1.3.0-dev.165",
138
- "@epam/ai-dial-conversation-input": "1.3.0-dev.165",
139
- "@epam/ai-dial-mcp-apps": "1.3.0-dev.165",
140
- "@epam/ai-dial-publish-panel": "1.3.0-dev.165",
141
- "@epam/ai-dial-quotations": "1.3.0-dev.165",
133
+ "@epam/ai-dial-attachment-canvas": "1.3.0-dev.170",
134
+ "@epam/ai-dial-attachment-input": "1.3.0-dev.170",
135
+ "@epam/ai-dial-catalog": "1.3.0-dev.170",
136
+ "@epam/ai-dial-chat-overlay": "1.3.0-dev.170",
137
+ "@epam/ai-dial-chat-shared": "1.3.0-dev.170",
138
+ "@epam/ai-dial-conversation-input": "1.3.0-dev.170",
139
+ "@epam/ai-dial-mcp-apps": "1.3.0-dev.170",
140
+ "@epam/ai-dial-publish-panel": "1.3.0-dev.170",
141
+ "@epam/ai-dial-quotations": "1.3.0-dev.170",
142
142
  "@epam/ai-dial-react-file-manager": "^0.4.0-dev.11",
143
- "@epam/ai-dial-scheduled-tasks": "1.3.0-dev.165",
144
- "@epam/ai-dial-share": "1.3.0-dev.165",
145
- "@epam/ai-dial-skill-editor": "1.3.0-dev.165",
146
- "@epam/ai-dial-source-panel": "1.3.0-dev.165",
143
+ "@epam/ai-dial-scheduled-tasks": "1.3.0-dev.170",
144
+ "@epam/ai-dial-share": "1.3.0-dev.170",
145
+ "@epam/ai-dial-skill-editor": "1.3.0-dev.170",
146
+ "@epam/ai-dial-source-panel": "1.3.0-dev.170",
147
147
  "@epam/ai-dial-ui-kit": "^0.16.0-dev.35",
148
- "@epam/ai-dial-usage-dashboard": "1.3.0-dev.165",
148
+ "@epam/ai-dial-usage-dashboard": "1.3.0-dev.170",
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,CA6HzC,CAAC"}
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, manifestByteLength: u, messages: d } = s, f = [], p = [], m = new Set(c), h = /* @__PURE__ */ new Map();
7
- for (let { path: e } of o) e !== "SKILL.md" && h.set(e, (h.get(e) ?? 0) + 1);
8
- let g = 0, _ = /* @__PURE__ */ new Set(), v, y = u, b = 0;
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, u, p = i.SupportingFile;
11
- if (l.toLowerCase() === "skill.md" && l !== "SKILL.md") u = d.manifestCasingInvalid;
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 (p = i.Manifest, b += 1, c.size > 1048576) u = d.fileTooLarge(r(e));
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("�")) u = d.manifestInvalidUtf8;
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() ? u = d.manifestInvalidFrontmatter : b === 1 && (v = {
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
- }, y = c.size);
25
+ }, C = c.size);
26
26
  }
27
27
  } catch {
28
- u = d.manifestInvalidFrontmatter;
28
+ f = p.manifestInvalidFrontmatter;
29
29
  }
30
- } else l ? t(l) ? m.has(l) || (h.get(l) ?? 0) > 1 ? u = d.pathDuplicate : c.size > 1048576 && (u = d.fileTooLarge(r(e))) : u = d.pathInvalid : u = d.required;
31
- !u && p === i.SupportingFile && (_.add(l), g += c.size), f.push({
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: u ? a.Invalid : a.Valid,
34
- kind: p,
35
- error: u
33
+ status: f ? a.Invalid : a.Valid,
34
+ kind: h,
35
+ error: f
36
36
  });
37
37
  }
38
- if (b > 1) {
39
- p.push({ message: d.manifestDuplicate }), v = void 0, y = u;
40
- for (let e of f) e.kind === i.Manifest && !e.error && (e.status = a.Invalid, e.error = d.manifestDuplicate);
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 + g + y > 16777216 && p.push({ message: d.totalSizeExceeded }), m.size + _.size + 1 > 100 && p.push({ message: d.totalCountExceeded }), {
43
- results: f,
44
- batchErrors: p,
45
- manifestCandidate: v
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;AAyBjE,kFAAkF;AAClF,MAAM,WAAW,uBAAuB;IACtC,2BAA2B;IAC3B,WAAW,EAAE,CACX,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EAAE,EACnB,KAAK,EAAE,IAAI,EAAE,KACV,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACrC,6EAA6E;IAC7E,WAAW,EAAE,CACX,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EAAE,EACnB,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,sBAAsB,CAAC,CAAC;CACtC;AAED,uDAAuD;AACvD,MAAM,WAAW,yBAAyB;IACxC,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,uGAAuG;IACvG,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IACvC;;;;OAIG;IACH,uBAAuB,EAAE,MAAM,CAAC;IAChC,sEAAsE;IACtE,WAAW,EAAE,MAAM,CAAC;IACpB,wGAAwG;IACxG,YAAY,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,eAAe,EAAE,MAAM,CAAC;IACxB,+DAA+D;IAC/D,kBAAkB,EAAE,MAAM,CAAC;IAC3B,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,gBAAgB,EAAE,MAAM,CAAC;IACzB,2EAA2E;IAC3E,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,iDAAiD;IACjD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,2EAA2E;IAC3E,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,uEAAuE;IACvE,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,mEAAmE;AACnE,MAAM,WAAW,6BAA6B;IAC5C,0BAA0B;IAC1B,OAAO,EAAE,mBAAmB,CAAC;IAC7B,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,2DAA2D;AAC3D,MAAM,WAAW,0BAA0B;IACzC,8CAA8C;IAC9C,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,oFAAoF;IACpF,UAAU,EAAE,OAAO,CAAC;IACpB,iDAAiD;IACjD,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,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,gEAAgE;IAChE,aAAa,EAAE,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC1D,2EAA2E;IAC3E,OAAO,EAAE,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACpD,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,uGAAuG;IACvG,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9C,kEAAkE;IAClE,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,mDAAmD;IACnD,MAAM,EAAE,uBAAuB,CAAC;IAChC,gDAAgD;IAChD,QAAQ,EAAE,yBAAyB,CAAC;IACpC,uDAAuD;IACvD,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,uFAAuF;IACvF,QAAQ,EAAE,CAAC,YAAY,EAAE,6BAA6B,KAAK,IAAI,CAAC;CACjE;AAED,oDAAoD;AACpD,MAAM,WAAW,0BAA0B;IACzC,4BAA4B;IAC5B,KAAK,EAAE,WAAW,CAAC;IACnB,sCAAsC;IACtC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,wEAAwE;IACxE,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,qHAAqH;IACrH,sBAAsB,EAAE,OAAO,CAAC;IAChC,uGAAuG;IACvG,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,4DAA4D;IAC5D,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IAC1C,2EAA2E;IAC3E,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,mDAAmD;IACnD,YAAY,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D;;;;OAIG;IACH,kBAAkB,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACzD;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAI,+KAelC,0BAA0B,KAAG,0BAyU/B,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
- }), m = ({ bucket: m, isEditMode: h, files: g, filesContentRef: _, frontmatterRef: v, loadedPathRef: y, etagRef: b, returnUrl: x, getCreateReturnUrl: S, refetchSkills: C, client: w, messages: T, onNavigate: E, onNotify: D }) => {
10
- let [O, k] = d({}), [A, j] = d(), [M, N] = d(!1), [P, F] = d(), [I, L] = d("idle"), R = u(null), z = u(null), B = l(async (n) => {
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
- k({ name: T.nameConflict });
14
+ j({ name: D.nameConflict });
14
15
  return;
15
16
  case 412:
16
- k({ name: T.nameConflict });
17
+ j({ name: D.nameConflict });
17
18
  return;
18
19
  case 413:
19
- j(T.archiveTooLarge);
20
+ N(D.archiveTooLarge);
20
21
  return;
21
22
  case 503:
22
- j(T.serviceUnavailable), N(!0);
23
+ N(D.serviceUnavailable), F(!0);
23
24
  return;
24
25
  case 400: {
25
26
  let { message: t } = await e(n);
26
- j(t ?? T.pathInvalid);
27
+ N(t ?? D.pathInvalid);
27
28
  return;
28
29
  }
29
30
  default: {
30
31
  let { traceId: t } = await e(n);
31
- j(T.saveError), D({
32
+ N(D.saveError), k({
32
33
  variant: f.Error,
33
- message: T.saveError,
34
+ message: D.saveError,
34
35
  requestId: t
35
36
  });
36
37
  }
37
38
  }
38
- }, [T, D]), V = l(async (e) => {
39
+ }, [D, k]), U = l(async (e) => {
39
40
  let t = s(e.name);
40
41
  if (!t || !o(t)) {
41
- k({ name: T.nameInvalid });
42
+ j({ name: D.nameInvalid });
42
43
  return;
43
44
  }
44
- let n = p(e, g), a = R.current, c = a != null && a.fingerprint === n, l = t, u, d, h;
45
- c ? {skillManifest: u, filePaths: d, files: h} = a : (u = i(v.current, t, e.description, e.instructions), {filePaths: d, files: h} = r(g, _.current)), L("submitting"), R.current = {
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: m,
48
+ bucket: h,
48
49
  path: l,
49
50
  skillManifest: u,
50
51
  filePaths: d,
51
- files: h
52
+ files: m
52
53
  };
53
54
  try {
54
- await w.createSkill(m, l, u, d, h), await C(), L("success"), D({
55
+ await E.createSkill(h, l, u, d, m), await T(), z("success"), k({
55
56
  variant: f.Success,
56
- title: T.saveSuccessTitle,
57
- message: T.createSuccess(t)
58
- }), E(S?.(l) ?? x);
57
+ title: D.saveSuccessTitle,
58
+ message: D.createSuccess(t)
59
+ }), O(w?.(l) ?? C);
59
60
  } catch (e) {
60
- L("failure"), await B(e);
61
+ z("failure"), await H(e);
61
62
  }
62
63
  }, [
63
- m,
64
- g,
64
+ h,
65
65
  _,
66
66
  v,
67
- T,
68
- w,
67
+ y,
68
+ b,
69
69
  D,
70
70
  E,
71
- x,
72
- S,
71
+ k,
72
+ O,
73
73
  C,
74
- B
75
- ]), H = l(async (e) => {
76
- let n = y.current, a = b.current;
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
- j(T.saveError);
80
+ N(D.saveError);
79
81
  return;
80
82
  }
81
- let o = i(v.current, e.name, e.description, e.instructions), { filePaths: s, files: c } = r(g, _.current);
82
- L("submitting");
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
- b.current = (await w.updateSkill(m, n, o, s, c, a)).etag ?? a, await C(), L("success"), D({
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: T.updateSuccessTitle,
87
- message: T.updateSuccess(e.name)
88
- }), E(x);
88
+ title: D.updateSuccessTitle,
89
+ message: D.updateSuccess(e.name)
90
+ }), O(C);
89
91
  } catch (e) {
90
- if (L("failure"), t(e) === 412) {
91
- F({ message: T.conflictMessage });
92
+ if (z("failure"), t(e) === 412) {
93
+ L({ message: D.conflictMessage });
92
94
  return;
93
95
  }
94
- await B(e);
96
+ await H(e);
95
97
  }
96
98
  }, [
97
- m,
98
- g,
99
+ h,
99
100
  _,
100
101
  v,
101
- y,
102
102
  b,
103
- T,
104
- w,
103
+ x,
104
+ S,
105
105
  D,
106
106
  E,
107
- x,
107
+ k,
108
+ O,
108
109
  C,
109
- B
110
- ]), U = l((e) => {
110
+ T,
111
+ H
112
+ ]), G = l((e) => {
111
113
  let t = c(e.instructions), r = a(e);
112
- k((e) => {
114
+ j((e) => {
113
115
  let i = { ...e };
114
116
  for (let e of Object.keys(n)) {
115
- let t = T.tooLong(n[e]);
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 === T.instructionsFrontmatter;
120
- t && !e ? i.instructions = T.instructionsFrontmatter : !t && e && delete 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
- }, [T]), W = l(async (e) => {
125
- if (I === "submitting" || !m) return;
126
+ }, [D]), K = l(async (e) => {
127
+ if (R === "submitting" || !h) return;
126
128
  let t = {};
127
- e.name.trim() || (t.name = T.required), e.description.trim() || (t.description = T.required), e.instructions.trim() ? c(e.instructions) && (t.instructions = T.instructionsFrontmatter) : t.instructions = T.required;
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] ??= T.tooLong(n[e]);
130
- Object.keys(t).length > 0 ? k(t) : (k({}), j(void 0), N(!1), F(void 0), z.current = e, h ? await H(e) : await V(e));
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
- I,
133
- m,
134
- T,
134
+ R,
135
135
  h,
136
- H,
137
- V
136
+ D,
137
+ g,
138
+ W,
139
+ U
138
140
  ]);
139
141
  return {
140
- phase: I,
141
- errors: O,
142
- submitError: A,
143
- isSubmitErrorRetryable: M,
142
+ phase: R,
143
+ errors: A,
144
+ submitError: M,
145
+ isSubmitErrorRetryable: P,
144
146
  retrySubmit: l(() => {
145
- let e = z.current;
146
- e != null && W(e);
147
- }, [W]),
148
- conflict: P,
149
- clearConflict: () => F(void 0),
150
- handleSubmit: W,
151
- handleValuesChange: U
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 { m as useSkillEditorSubmit };
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,yBA2M9B,CAAC"}
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), O = c(() => {
10
- let e = m.filter((e) => e.kind === f.File).map((e) => e.path), r = 0;
11
- for (let t of e) r += g.current.get(t)?.bytes.length ?? 0;
12
- let i = {
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
- }, a = b ? n(_.current, i.name, i.description, i.instructions) : t(i);
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
- manifestByteLength: s(a),
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
- ]), k = c(() => new Promise((e) => {
31
- D.current = e, E(!0);
32
- }), []), A = c((e) => {
33
- E(!1), D.current?.(e), D.current = null;
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, O());
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, O());
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 k()) return { error: C.manifestImportDeclined };
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 n) g.current.set(e.path, {
63
+ for (let e of a) g.current.set(e.path, {
58
64
  bytes: e.bytes,
59
65
  mimeType: e.mimeType
60
66
  });
61
- return n.length > 0 && h((e) => [...e, ...n.map((e) => ({
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
- }))]), r && (_.current = b ? {
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
- O,
106
+ A,
107
+ m,
94
108
  b,
95
109
  x,
96
110
  v,
97
- k,
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: A
121
+ resolveManifestImport: M,
122
+ contentRevisions: D
108
123
  };
109
124
  };
110
125
  //#endregion