@epam/ai-dial-chat-hooks 1.2.0-dev.164 → 1.2.0-dev.173
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/catalog/map-entity-details-to-catalog.js +7 -0
- package/catalog.d.ts +2 -0
- package/conversation/create-chat-stream-api.js +63 -36
- package/conversation/useConversationStream/generation-resume.js +80 -51
- package/conversation/useConversationStream/useConversationStream.js +162 -130
- package/conversation.d.ts +20 -0
- package/conversation.js +32 -32
- package/file-manager.d.ts +23 -17
- package/files/dial-file-manager-mapping.util.js +1 -1
- package/files/dial-file-manager.types.js +2 -2
- package/files/useDialFileManager/useDialFileManager.js +130 -128
- package/files/useDialFileMutations/useDialFileMutations.js +33 -32
- package/files/useDialFileUploadBatch/useDialFileUploadBatch.js +117 -110
- package/index.d.ts +83 -21
- package/index.js +124 -124
- package/package.json +17 -17
- package/scheduled-task/use-scheduled-task-runs.js +162 -50
- package/scheduled-tasks.d.ts +17 -2
- package/scheduled-tasks.js +2 -2
- package/skill/skill-archive.js +19 -0
- package/skill/skill.js +41 -29
- package/skill/useSkillEditorSubmit.js +98 -92
- package/skill/useSkillFileActions.js +70 -58
- package/skill-editor.d.ts +21 -2
- package/skill-editor.js +9 -9
|
@@ -1,82 +1,194 @@
|
|
|
1
1
|
import { useCallback as e, useEffect as t, useRef as n, useState as r } from "react";
|
|
2
|
+
import { ScheduledTaskRunDtoStatusEnum as i } from "@epam/ai-dial-chat-api-client";
|
|
2
3
|
//#region src/scheduled-task/use-scheduled-task-runs.ts
|
|
3
|
-
var
|
|
4
|
-
|
|
4
|
+
var a = 15e3, o = 20, s = 5e3, c = 2147483647, l = (e, t) => {
|
|
5
|
+
if (e <= c) {
|
|
6
|
+
let n = setTimeout(t, Math.max(e, 0));
|
|
7
|
+
return () => clearTimeout(n);
|
|
8
|
+
}
|
|
9
|
+
let n, r = setTimeout(() => {
|
|
10
|
+
n = l(e - c, t);
|
|
11
|
+
}, c);
|
|
12
|
+
return n = () => clearTimeout(r), () => n();
|
|
13
|
+
}, u = (e, t) => {
|
|
14
|
+
let n = new Map(t.map((e) => [e.id, e])), r = new Set(e.map((e) => e.id)), i = e.map((e) => n.get(e.id) ?? e);
|
|
15
|
+
return [...t.filter((e) => !r.has(e.id)), ...i];
|
|
16
|
+
}, d = (e, t) => {
|
|
17
|
+
if (e.length !== t.length) return !0;
|
|
18
|
+
let n = new Map(e.map((e) => [e.id, e]));
|
|
19
|
+
return t.some((e) => {
|
|
20
|
+
let t = n.get(e.id);
|
|
21
|
+
return !t || JSON.stringify(t) !== JSON.stringify(e);
|
|
22
|
+
});
|
|
23
|
+
}, f = (c, { scheduleId: f, enabled: p = !0, pageSize: m = 10, nextRunTime: h }) => {
|
|
24
|
+
let [g, _] = r([]), [v, y] = r(p), [b, x] = r(!1), [S, C] = r(null), [w, T] = r(null), [E, D] = r(!1), [O, k] = r(0), A = n(0), j = n(0), M = n(!1), N = n(null), P = n(g), F = n(v), I = n(b), L = n(null), R = n(0), z = n(null), B = n(!1);
|
|
25
|
+
P.current = g, F.current = v, I.current = b;
|
|
26
|
+
let V = g.some((e) => e.status === i.InProgress);
|
|
5
27
|
t(() => {
|
|
6
|
-
let e = ++
|
|
7
|
-
|
|
28
|
+
let e = ++A.current, t = new AbortController();
|
|
29
|
+
N.current?.abort(), N.current = null, L.current?.abort(), L.current = null, M.current = !1, R.current = 0, z.current = null, B.current = !1, x(!1), C(null), T(null), _([]), D(!1), j.current = 0;
|
|
8
30
|
let n = () => {
|
|
9
|
-
++
|
|
31
|
+
++A.current, t.abort(), N.current?.abort(), N.current = null, L.current?.abort(), L.current = null;
|
|
10
32
|
};
|
|
11
|
-
return !
|
|
12
|
-
|
|
33
|
+
return !p || !f ? (y(!1), _([]), D(!1), n) : ((async () => {
|
|
34
|
+
y(!0);
|
|
13
35
|
try {
|
|
14
|
-
let n = await
|
|
15
|
-
scheduleId:
|
|
16
|
-
limit:
|
|
36
|
+
let n = await c.listScheduledTaskRuns({
|
|
37
|
+
scheduleId: f,
|
|
38
|
+
limit: m,
|
|
17
39
|
offset: 0,
|
|
18
40
|
signal: t.signal
|
|
19
41
|
});
|
|
20
|
-
if (
|
|
21
|
-
|
|
42
|
+
if (A.current !== e) return;
|
|
43
|
+
_(n.items), j.current = n.items.length, D(n.next != null || (n.count == null ? n.items.length === m : n.items.length < n.count));
|
|
22
44
|
} catch (t) {
|
|
23
|
-
|
|
45
|
+
A.current === e && C(t instanceof Error ? t : /* @__PURE__ */ Error("Failed to load scheduled task runs"));
|
|
24
46
|
} finally {
|
|
25
|
-
|
|
47
|
+
A.current === e && y(!1);
|
|
26
48
|
}
|
|
27
49
|
})(), n);
|
|
28
50
|
}, [
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
51
|
+
c,
|
|
52
|
+
p,
|
|
53
|
+
m,
|
|
54
|
+
O,
|
|
55
|
+
f
|
|
34
56
|
]);
|
|
35
|
-
let
|
|
36
|
-
if (!
|
|
37
|
-
|
|
57
|
+
let H = e(() => {
|
|
58
|
+
if (!p || !f || !E || v || M.current) return;
|
|
59
|
+
M.current = !0;
|
|
38
60
|
let e = new AbortController();
|
|
39
|
-
|
|
40
|
-
let t =
|
|
61
|
+
N.current = e;
|
|
62
|
+
let t = A.current, n = j.current;
|
|
41
63
|
(async () => {
|
|
42
|
-
|
|
64
|
+
x(!0), T(null);
|
|
43
65
|
try {
|
|
44
|
-
let r = await
|
|
45
|
-
scheduleId:
|
|
46
|
-
limit:
|
|
66
|
+
let r = await c.listScheduledTaskRuns({
|
|
67
|
+
scheduleId: f,
|
|
68
|
+
limit: m,
|
|
47
69
|
offset: n,
|
|
48
70
|
signal: e.signal
|
|
49
71
|
});
|
|
50
|
-
if (
|
|
51
|
-
|
|
72
|
+
if (A.current !== t) return;
|
|
73
|
+
_((e) => {
|
|
52
74
|
let t = new Set(e.map(({ id: e }) => e));
|
|
53
75
|
return [...e, ...r.items.filter(({ id: e }) => t.has(e) ? !1 : (t.add(e), !0))];
|
|
54
|
-
}),
|
|
76
|
+
}), j.current = n + r.items.length, D(r.next != null || (r.count == null ? r.items.length === m : n + r.items.length < r.count));
|
|
55
77
|
} catch (e) {
|
|
56
|
-
|
|
78
|
+
A.current === t && T(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load more scheduled task runs"));
|
|
57
79
|
} finally {
|
|
58
|
-
|
|
80
|
+
A.current === t && (x(!1), M.current = !1, N.current = null);
|
|
59
81
|
}
|
|
60
82
|
})();
|
|
61
83
|
}, [
|
|
62
|
-
|
|
63
|
-
|
|
84
|
+
c,
|
|
85
|
+
p,
|
|
86
|
+
E,
|
|
64
87
|
v,
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
88
|
+
m,
|
|
89
|
+
f
|
|
90
|
+
]), U = e(async () => {
|
|
91
|
+
if (F.current || I.current) return "skipped";
|
|
92
|
+
let e = A.current, t = new AbortController();
|
|
93
|
+
L.current?.abort(), L.current = t;
|
|
94
|
+
try {
|
|
95
|
+
let n = await c.listScheduledTaskRuns({
|
|
96
|
+
scheduleId: f,
|
|
97
|
+
limit: m,
|
|
98
|
+
offset: 0,
|
|
99
|
+
signal: t.signal
|
|
100
|
+
});
|
|
101
|
+
if (A.current !== e || F.current || I.current) return "skipped";
|
|
102
|
+
let r = P.current, i = u(r, n.items), a = d(r, i);
|
|
103
|
+
return a && (P.current = i, _(i)), a ? "changed" : "unchanged";
|
|
104
|
+
} catch {
|
|
105
|
+
return "error";
|
|
106
|
+
} finally {
|
|
107
|
+
L.current === t && (L.current = null);
|
|
108
|
+
}
|
|
109
|
+
}, [
|
|
110
|
+
c,
|
|
111
|
+
f,
|
|
112
|
+
m
|
|
113
|
+
]), W = e(() => {
|
|
114
|
+
if (document.visibilityState !== "visible") {
|
|
115
|
+
B.current = !0;
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
U();
|
|
119
|
+
}, [U]);
|
|
120
|
+
return t(() => {
|
|
121
|
+
if (!p || !f || !V) return;
|
|
122
|
+
R.current = 0;
|
|
123
|
+
let e = setInterval(() => {
|
|
124
|
+
if (document.visibilityState !== "visible") {
|
|
125
|
+
B.current = !0;
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
(async () => {
|
|
129
|
+
let t = await U();
|
|
130
|
+
if (t === "changed") {
|
|
131
|
+
R.current = 0;
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
(t === "unchanged" || t === "error") && (R.current += 1, R.current >= o && e !== null && (clearInterval(e), e = null));
|
|
135
|
+
})();
|
|
136
|
+
}, a);
|
|
137
|
+
return () => {
|
|
138
|
+
e !== null && clearInterval(e);
|
|
139
|
+
};
|
|
140
|
+
}, [
|
|
141
|
+
p,
|
|
142
|
+
f,
|
|
143
|
+
V,
|
|
144
|
+
U
|
|
145
|
+
]), t(() => {
|
|
146
|
+
if (!p || !f || !h) return;
|
|
147
|
+
let e = new Date(h).getTime();
|
|
148
|
+
if (!(Number.isNaN(e) || e <= Date.now())) return l(e - Date.now() + s, () => {
|
|
149
|
+
z.current = h, W();
|
|
150
|
+
});
|
|
151
|
+
}, [
|
|
152
|
+
p,
|
|
153
|
+
f,
|
|
154
|
+
h,
|
|
155
|
+
W
|
|
156
|
+
]), t(() => {
|
|
157
|
+
if (!p || !f) return;
|
|
158
|
+
let e = () => {
|
|
159
|
+
document.visibilityState !== "visible" || !B.current || (async () => {
|
|
160
|
+
await U() !== "skipped" && (B.current = !1);
|
|
161
|
+
})();
|
|
162
|
+
};
|
|
163
|
+
return document.addEventListener("visibilitychange", e), () => {
|
|
164
|
+
document.removeEventListener("visibilitychange", e);
|
|
165
|
+
};
|
|
166
|
+
}, [
|
|
167
|
+
p,
|
|
168
|
+
f,
|
|
169
|
+
U
|
|
170
|
+
]), t(() => {
|
|
171
|
+
if (!p || !f || !h || v || b) return;
|
|
172
|
+
let e = new Date(h).getTime();
|
|
173
|
+
Number.isNaN(e) || e > Date.now() || z.current !== h && (z.current = h, W());
|
|
174
|
+
}, [
|
|
175
|
+
p,
|
|
176
|
+
f,
|
|
177
|
+
h,
|
|
178
|
+
v,
|
|
179
|
+
b,
|
|
180
|
+
W
|
|
181
|
+
]), {
|
|
182
|
+
items: g,
|
|
183
|
+
isLoading: v,
|
|
184
|
+
isLoadingMore: b,
|
|
185
|
+
initialError: S,
|
|
186
|
+
loadMoreError: w,
|
|
187
|
+
hasMore: E,
|
|
188
|
+
loadMore: H,
|
|
189
|
+
retryLoadMore: H,
|
|
190
|
+
refetch: e(() => k((e) => e + 1), [])
|
|
79
191
|
};
|
|
80
192
|
};
|
|
81
193
|
//#endregion
|
|
82
|
-
export {
|
|
194
|
+
export { u as mergeRunsById, f as useScheduledTaskRuns };
|
package/scheduled-tasks.d.ts
CHANGED
|
@@ -53,6 +53,15 @@ export declare const mapFormValuesToUpdateBody: (values: ScheduledTaskCreateForm
|
|
|
53
53
|
*/
|
|
54
54
|
export declare const mapScheduledTaskDtoToFormValues: (dto: ScheduledTaskDto) => ScheduledTaskDtoMappingResult;
|
|
55
55
|
|
|
56
|
+
/**
|
|
57
|
+
* Merges a freshly-fetched page 0 into the currently-loaded run list: an
|
|
58
|
+
* already-known id is replaced in place at its existing array position, an
|
|
59
|
+
* unseen id is prepended (upstream order is `created_at desc`, so it is the
|
|
60
|
+
* newest), and an id absent from `incoming` is left untouched — a background
|
|
61
|
+
* refresh never removes a loaded run.
|
|
62
|
+
*/
|
|
63
|
+
export declare const mergeRunsById: (current: ScheduledTaskRunDto[], incoming: ScheduledTaskRunDto[]) => ScheduledTaskRunDto[];
|
|
64
|
+
|
|
56
65
|
/**
|
|
57
66
|
* Validates form values before creating a request body. Hosts translate the
|
|
58
67
|
* returned field codes and must not issue a write when `ok` is false.
|
|
@@ -181,8 +190,8 @@ export declare enum UnsupportedTriggerReason {
|
|
|
181
190
|
MissingRequiredFields = "missingRequiredFields"
|
|
182
191
|
}
|
|
183
192
|
|
|
184
|
-
/** Shared, cancellation-safe pagination for one schedule's run history. */
|
|
185
|
-
export declare const useScheduledTaskRuns: (client: ScheduledTasksApiClient, { scheduleId, enabled, pageSize }: UseScheduledTaskRunsOptions) => {
|
|
193
|
+
/** Shared, cancellation-safe pagination and background refresh for one schedule's run history. */
|
|
194
|
+
export declare const useScheduledTaskRuns: (client: ScheduledTasksApiClient, { scheduleId, enabled, pageSize, nextRunTime, }: UseScheduledTaskRunsOptions) => {
|
|
186
195
|
items: ScheduledTaskRunDto[];
|
|
187
196
|
isLoading: boolean;
|
|
188
197
|
isLoadingMore: boolean;
|
|
@@ -198,6 +207,12 @@ export declare interface UseScheduledTaskRunsOptions {
|
|
|
198
207
|
scheduleId: string;
|
|
199
208
|
enabled?: boolean;
|
|
200
209
|
pageSize?: number;
|
|
210
|
+
/**
|
|
211
|
+
* The task's next scheduled run time (ISO string), when known. Drives the
|
|
212
|
+
* one-shot background refresh described on {@link useScheduledTaskRuns}.
|
|
213
|
+
* The caller already holds the task DTO — this hook never fetches it.
|
|
214
|
+
*/
|
|
215
|
+
nextRunTime?: string | null;
|
|
201
216
|
}
|
|
202
217
|
|
|
203
218
|
/** Shared scheduler-list lifecycle with generation-scoped stale-response guards. */
|
package/scheduled-tasks.js
CHANGED
|
@@ -4,5 +4,5 @@ import { mapFormValuesToCreateBody as r, mapFormValuesToUpdateBody as i, mapSche
|
|
|
4
4
|
import { prepareScheduledTaskCreateBody as o, prepareScheduledTaskUpdateBody as s } from "./scheduled-task/scheduled-task-preparation.js";
|
|
5
5
|
import { createScheduledTasksApiClient as c } from "./scheduled-task/scheduled-tasks-api-client.js";
|
|
6
6
|
import { useScheduledTasks as l } from "./scheduled-task/use-scheduled-tasks.js";
|
|
7
|
-
import {
|
|
8
|
-
export { t as ScheduledTaskTriggerDescriptionKind, e as UnsupportedTriggerReason, c as createScheduledTasksApiClient, n as describeScheduledTaskTrigger, r as mapFormValuesToCreateBody, i as mapFormValuesToUpdateBody, a as mapScheduledTaskDtoToFormValues, o as prepareScheduledTaskCreateBody, s as prepareScheduledTaskUpdateBody,
|
|
7
|
+
import { mergeRunsById as u, useScheduledTaskRuns as d } from "./scheduled-task/use-scheduled-task-runs.js";
|
|
8
|
+
export { t as ScheduledTaskTriggerDescriptionKind, e as UnsupportedTriggerReason, c as createScheduledTasksApiClient, n as describeScheduledTaskTrigger, r as mapFormValuesToCreateBody, i as mapFormValuesToUpdateBody, a as mapScheduledTaskDtoToFormValues, u as mergeRunsById, o as prepareScheduledTaskCreateBody, s as prepareScheduledTaskUpdateBody, d as useScheduledTaskRuns, l as useScheduledTasks };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { nameFromPath as e } from "./skill.js";
|
|
2
|
+
import { inferMimeTypeFromPath as t } from "@epam/ai-dial-chat-shared";
|
|
3
|
+
import { unzipSync as n } from "fflate";
|
|
4
|
+
//#region src/skill/skill-archive.ts
|
|
5
|
+
var r = "__MACOSX/", i = ".DS_Store", a = (t) => t.endsWith("/") || t.startsWith(r) || e(t) === i, o = (e) => new Promise((t, n) => {
|
|
6
|
+
let r = new FileReader();
|
|
7
|
+
r.onload = () => t(new Uint8Array(r.result)), r.onerror = () => n(r.error), r.readAsArrayBuffer(e);
|
|
8
|
+
}), s = async (r) => {
|
|
9
|
+
let i = n(await o(r));
|
|
10
|
+
return Object.entries(i).flatMap(([n, r]) => {
|
|
11
|
+
let i = n.replace(/\\/g, "/");
|
|
12
|
+
return a(i) ? [] : [{
|
|
13
|
+
path: i,
|
|
14
|
+
file: new File([r], e(i), { type: t(i) ?? "" })
|
|
15
|
+
}];
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
//#endregion
|
|
19
|
+
export { s as extractSkillArchive };
|
package/skill/skill.js
CHANGED
|
@@ -1,51 +1,63 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { ENTITY_DESCRIPTION_MAX_LENGTH as e, ENTITY_INSTRUCTIONS_MAX_LENGTH as t, ENTITY_NAME_MAX_LENGTH as n, exceedsMaxLength as r } from "@epam/ai-dial-chat-shared";
|
|
2
|
+
import { SkillFileNodeKind as i } from "@epam/ai-dial-skill-editor";
|
|
3
|
+
import { unzipSync as a } from "fflate";
|
|
4
|
+
import { parse as o, stringify as s } from "yaml";
|
|
4
5
|
//#region src/skill/skill.ts
|
|
5
|
-
var
|
|
6
|
-
if (e === "" || e.startsWith("/") ||
|
|
6
|
+
var c = "SKILL.md", l = 1048576, u = 16777216, d = 100, f = new Set([".dial-resource", ".dial-folder"]), p = new Set(["files", "v"]), m = /^[a-zA-Z]:/, h = /[\x00-\x1f]/, g = (e) => {
|
|
7
|
+
if (e === "" || e.startsWith("/") || m.test(e) || e.includes("\\") || h.test(e)) return !1;
|
|
7
8
|
let t = e.split("/");
|
|
8
|
-
return !(t.some((e) => e === "" || e === "." || e === "..") || t.some((e) =>
|
|
9
|
-
},
|
|
9
|
+
return !(t.some((e) => e === "" || e === "." || e === "..") || t.some((e) => f.has(e)) || p.has(t[0]));
|
|
10
|
+
}, _ = (e) => e.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-/, "").replace(/-$/, ""), v = {
|
|
11
|
+
name: n,
|
|
12
|
+
description: e,
|
|
13
|
+
instructions: t
|
|
14
|
+
}, y = (e) => {
|
|
15
|
+
let t = {};
|
|
16
|
+
for (let n of Object.keys(v)) {
|
|
17
|
+
let i = v[n];
|
|
18
|
+
r(e[n].trim(), i) && (t[n] = i);
|
|
19
|
+
}
|
|
20
|
+
return t;
|
|
21
|
+
}, b = ({ name: e, description: t, instructions: n }) => `---\n${s({
|
|
10
22
|
name: e,
|
|
11
23
|
description: t
|
|
12
|
-
}).trimEnd()}\n---\n\n${n}`,
|
|
24
|
+
}).trimEnd()}\n---\n\n${n}`, x = (e, t, n, r) => `---\n${s({
|
|
13
25
|
...e,
|
|
14
26
|
name: t,
|
|
15
27
|
description: n
|
|
16
|
-
}).trimEnd()}\n---\n\n${
|
|
28
|
+
}).trimEnd()}\n---\n\n${r}`, S = /^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/, C = /^---[ \t]*$/, w = (e) => {
|
|
17
29
|
let t = e.replace(/^\uFEFF/, "").replace(/\r\n/g, "\n").split("\n"), n = t.findIndex((e) => e.trim() !== "");
|
|
18
|
-
return n === -1 || !
|
|
19
|
-
},
|
|
20
|
-
let t =
|
|
30
|
+
return n === -1 || !C.test(t[n]) ? !1 : t.some((e, t) => t > n && C.test(e));
|
|
31
|
+
}, T = (e) => {
|
|
32
|
+
let t = S.exec(e);
|
|
21
33
|
if (!t) throw Error("SKILL.md is missing its YAML frontmatter block");
|
|
22
|
-
let [,
|
|
34
|
+
let [, n, r] = t;
|
|
23
35
|
return {
|
|
24
|
-
frontmatter: n
|
|
25
|
-
instructions:
|
|
36
|
+
frontmatter: o(n) ?? {},
|
|
37
|
+
instructions: r.replace(/^\r?\n/, "")
|
|
26
38
|
};
|
|
27
|
-
},
|
|
28
|
-
let
|
|
29
|
-
if (
|
|
30
|
-
let
|
|
31
|
-
for (let [e,
|
|
39
|
+
}, E = (e) => {
|
|
40
|
+
let t = a(e), n = t[c];
|
|
41
|
+
if (n == null) throw Error(`Skill archive is missing a root ${c} file`);
|
|
42
|
+
let r = /* @__PURE__ */ new Map();
|
|
43
|
+
for (let [e, n] of Object.entries(t)) e === "SKILL.md" || e.endsWith("/") || r.set(e, n);
|
|
32
44
|
return {
|
|
33
|
-
manifestText: new TextDecoder().decode(
|
|
34
|
-
files:
|
|
45
|
+
manifestText: new TextDecoder().decode(n),
|
|
46
|
+
files: r
|
|
35
47
|
};
|
|
36
|
-
},
|
|
48
|
+
}, D = (e) => {
|
|
37
49
|
let t = e.lastIndexOf("/");
|
|
38
50
|
return t === -1 ? e : e.slice(t + 1);
|
|
39
|
-
},
|
|
51
|
+
}, O = (e) => new Blob([new Uint8Array(e)]), k = (e, t, n, r) => Object.keys(e).length > 0 ? x(e, t, n, r) : b({
|
|
40
52
|
name: t,
|
|
41
53
|
description: n,
|
|
42
54
|
instructions: r
|
|
43
|
-
}),
|
|
44
|
-
let
|
|
55
|
+
}), A = (e, t) => {
|
|
56
|
+
let n = e.filter((e) => e.kind === i.File);
|
|
45
57
|
return {
|
|
46
|
-
filePaths:
|
|
47
|
-
files:
|
|
58
|
+
filePaths: n.map((e) => e.path),
|
|
59
|
+
files: n.map((e) => O(t.get(e.path)?.bytes ?? new Uint8Array()))
|
|
48
60
|
};
|
|
49
61
|
};
|
|
50
62
|
//#endregion
|
|
51
|
-
export {
|
|
63
|
+
export { l as SKILL_FILE_UPLOAD_MAX_BYTES, c as SKILL_MANIFEST_FILE, v as SKILL_TEXT_FIELD_MAX_LENGTHS, d as SKILL_UPLOAD_MAX_FILES, u as SKILL_UPLOAD_MAX_TOTAL_BYTES, A as buildSkillFilesPayload, b as buildSkillManifest, k as buildSkillManifestForSubmit, x as buildSkillManifestFromFrontmatter, y as getSkillFieldLengthViolations, g as isValidSkillRelativePath, D as nameFromPath, _ as normalizeSkillName, T as parseSkillManifest, O as skillFileBytesToBlob, w as startsWithFrontmatterBlock, E as unpackSkillArchive };
|