@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
|
@@ -19,138 +19,145 @@ var f = 5, p = (e) => e.error ? `${e.path} (${e.error})` : e.path, m = (e) => {
|
|
|
19
19
|
}, h = (e, t) => `${e}${t}/`, g = (e) => /\.zip$/i.test(e), _ = (e) => {
|
|
20
20
|
let [t] = e;
|
|
21
21
|
if (!(e.length !== 1 || t == null)) return g(t.fileContent.name) && !g(t.name) ? t : void 0;
|
|
22
|
-
}, v =
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}), (async () => {
|
|
22
|
+
}, v = 0, y = () => (v += 1, `${Date.now()}-${v}`), b = (e, t) => ({
|
|
23
|
+
files: [...e?.files ?? [], ...t],
|
|
24
|
+
isOpen: !0
|
|
25
|
+
}), x = ({ filesApi: f, bucket: p, rootLabel: g, activeTab: v, cache: x, sharedRootMetaRef: S, invalidateFolders: C, bumpRetry: w, onNotification: T }) => {
|
|
26
|
+
let [E, D] = l(null), O = c(/* @__PURE__ */ new Map()), k = s((e, t, r) => {
|
|
27
|
+
let s = i(r, g), c = y();
|
|
28
|
+
D((e) => b(e, [{
|
|
29
|
+
id: c,
|
|
30
|
+
name: t,
|
|
31
|
+
status: o.Uploading
|
|
32
|
+
}])), (async () => {
|
|
33
|
+
let r = o.Failed;
|
|
33
34
|
try {
|
|
34
|
-
let { results:
|
|
35
|
-
|
|
35
|
+
let { results: i } = await f.uploadArchive(e, p, h(s, t)), a = i.filter((e) => e.success).length, c = i.filter((e) => !e.success), l = c.length, { names: d, restCount: g } = m(c);
|
|
36
|
+
i.length > 0 && a === 0 ? T?.({
|
|
36
37
|
variant: u.Error,
|
|
37
38
|
reason: n.UploadArchiveFailed,
|
|
38
|
-
names:
|
|
39
|
-
restCount:
|
|
40
|
-
}) :
|
|
39
|
+
names: d,
|
|
40
|
+
restCount: g
|
|
41
|
+
}) : (r = o.Completed, l > 0 && T?.({
|
|
41
42
|
variant: u.Error,
|
|
42
43
|
reason: n.UploadArchivePartiallyFailed,
|
|
43
|
-
count:
|
|
44
|
-
names:
|
|
45
|
-
restCount:
|
|
46
|
-
});
|
|
44
|
+
count: l,
|
|
45
|
+
names: d,
|
|
46
|
+
restCount: g
|
|
47
|
+
}));
|
|
47
48
|
} catch {
|
|
48
|
-
|
|
49
|
+
T?.({
|
|
49
50
|
variant: u.Error,
|
|
50
51
|
reason: n.UploadArchiveRequestFailed
|
|
51
52
|
});
|
|
52
53
|
} finally {
|
|
53
|
-
|
|
54
|
+
C([s]), w(), D((e) => a(e, c, {
|
|
55
|
+
status: r,
|
|
56
|
+
percent: 100
|
|
57
|
+
}));
|
|
54
58
|
}
|
|
55
59
|
})();
|
|
56
60
|
}, [
|
|
57
61
|
p,
|
|
58
62
|
g,
|
|
59
|
-
|
|
63
|
+
T,
|
|
60
64
|
f,
|
|
65
|
+
C,
|
|
66
|
+
w
|
|
67
|
+
]), A = s((e, s) => {
|
|
68
|
+
if (e.length === 0) return;
|
|
69
|
+
let c = _(e);
|
|
70
|
+
if (c != null) {
|
|
71
|
+
k(c.fileContent, c.name, s);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
let l = e.map((e) => ({
|
|
75
|
+
id: y(),
|
|
76
|
+
name: e.name,
|
|
77
|
+
status: o.Queued
|
|
78
|
+
})), m = O.current;
|
|
79
|
+
for (let e of l) m.set(e.id, new AbortController());
|
|
80
|
+
D((e) => b(e, l));
|
|
81
|
+
let h = i(s, g), { bucket: E, path: A } = v === d.Shared ? r(h, S.current, p) : {
|
|
82
|
+
bucket: p,
|
|
83
|
+
path: h
|
|
84
|
+
}, j = new Set((x.get(h) ?? []).map((e) => e.name.toLowerCase()));
|
|
85
|
+
(async () => {
|
|
86
|
+
let r = 0, i = 0, s = 0, c = 0, d = async () => {
|
|
87
|
+
for (; r < e.length;) {
|
|
88
|
+
let n = r++, u = e[n], { id: d } = l[n], p = m.get(d);
|
|
89
|
+
if (p == null || p.signal.aborted) {
|
|
90
|
+
c += 1, m.delete(d), D((e) => a(e, d, o.Cancelled));
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
D((e) => a(e, d, {
|
|
94
|
+
status: o.Uploading,
|
|
95
|
+
percent: 0
|
|
96
|
+
}));
|
|
97
|
+
let h = j.has(u.name.toLowerCase()) ? t.Overwrite : t.CreateOnly;
|
|
98
|
+
try {
|
|
99
|
+
await f.uploadFile(E, `${A}${u.name}`, u.fileContent, {
|
|
100
|
+
signal: p.signal,
|
|
101
|
+
uploadMode: h,
|
|
102
|
+
onProgress: (e) => {
|
|
103
|
+
D((t) => a(t, d, {
|
|
104
|
+
status: o.Uploading,
|
|
105
|
+
percent: e
|
|
106
|
+
}));
|
|
107
|
+
}
|
|
108
|
+
}), D((e) => a(e, d, {
|
|
109
|
+
status: o.Completed,
|
|
110
|
+
percent: 100
|
|
111
|
+
})), i += 1;
|
|
112
|
+
} catch {
|
|
113
|
+
let e = o.Failed;
|
|
114
|
+
p.signal.aborted ? (e = o.Cancelled, c += 1) : s += 1, D((t) => a(t, d, e));
|
|
115
|
+
} finally {
|
|
116
|
+
m.delete(d);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
await Promise.all(Array.from({ length: 3 }, () => d())), c < e.length && (i === 0 && s > 0 ? T?.({
|
|
121
|
+
variant: u.Error,
|
|
122
|
+
reason: n.UploadFailed
|
|
123
|
+
}) : i > 0 && T?.({
|
|
124
|
+
variant: u.Success,
|
|
125
|
+
reason: n.UploadCompleted,
|
|
126
|
+
folder: A || g
|
|
127
|
+
})), C([h]), w();
|
|
128
|
+
})();
|
|
129
|
+
}, [
|
|
130
|
+
v,
|
|
131
|
+
p,
|
|
61
132
|
x,
|
|
62
|
-
|
|
63
|
-
|
|
133
|
+
g,
|
|
134
|
+
T,
|
|
135
|
+
f,
|
|
136
|
+
S,
|
|
137
|
+
C,
|
|
138
|
+
w,
|
|
139
|
+
k
|
|
140
|
+
]), j = s((e, t, n) => {
|
|
141
|
+
k(e, t, n);
|
|
142
|
+
}, [k]), M = s(async (t, n, r) => {
|
|
143
|
+
for (let n of t) n.name = e(n.name);
|
|
144
|
+
return { valid: !0 };
|
|
145
|
+
}, []), N = s((e) => {
|
|
146
|
+
O.current.get(e)?.abort();
|
|
147
|
+
}, []);
|
|
64
148
|
return {
|
|
65
|
-
onUploadFiles:
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
D(c.fileContent, c.name, s);
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
let l = new AbortController();
|
|
73
|
-
E.current = l, T({
|
|
74
|
-
files: e.map((e, t) => ({
|
|
75
|
-
id: `${Date.now()}-${t}`,
|
|
76
|
-
name: e.name,
|
|
77
|
-
status: o.Queued
|
|
78
|
-
})),
|
|
79
|
-
isOpen: !0
|
|
80
|
-
});
|
|
81
|
-
let m = i(s, g), { bucket: h, path: w } = v === d.Shared ? r(m, b.current, p) : {
|
|
82
|
-
bucket: p,
|
|
83
|
-
path: m
|
|
84
|
-
}, O = new Set((y.get(m) ?? []).map((e) => e.name.toLowerCase()));
|
|
85
|
-
(async () => {
|
|
86
|
-
let r = 0, i = 0, s = 0, c = async () => {
|
|
87
|
-
for (; r < e.length;) {
|
|
88
|
-
let n = r++, c = e[n];
|
|
89
|
-
if (l.signal.aborted) {
|
|
90
|
-
T((e) => a(e, n, o.Cancelled));
|
|
91
|
-
continue;
|
|
92
|
-
}
|
|
93
|
-
T((e) => a(e, n, {
|
|
94
|
-
status: o.Uploading,
|
|
95
|
-
percent: 0
|
|
96
|
-
}));
|
|
97
|
-
let u = O.has(c.name.toLowerCase()) ? t.Overwrite : t.CreateOnly;
|
|
98
|
-
try {
|
|
99
|
-
await f.uploadFile(h, `${w}${c.name}`, c.fileContent, {
|
|
100
|
-
signal: l.signal,
|
|
101
|
-
uploadMode: u,
|
|
102
|
-
onProgress: (e) => {
|
|
103
|
-
T((t) => a(t, n, {
|
|
104
|
-
status: o.Uploading,
|
|
105
|
-
percent: e
|
|
106
|
-
}));
|
|
107
|
-
}
|
|
108
|
-
}), T((e) => a(e, n, {
|
|
109
|
-
status: o.Completed,
|
|
110
|
-
percent: 100
|
|
111
|
-
})), i += 1;
|
|
112
|
-
} catch {
|
|
113
|
-
let e = l.signal.aborted ? o.Cancelled : o.Failed;
|
|
114
|
-
e === o.Failed && (s += 1), T((t) => a(t, n, e));
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
};
|
|
118
|
-
await Promise.all(Array.from({ length: 3 }, () => c())), l.signal.aborted || (i === 0 && s > 0 ? C?.({
|
|
119
|
-
variant: u.Error,
|
|
120
|
-
reason: n.UploadFailed
|
|
121
|
-
}) : C?.({
|
|
122
|
-
variant: u.Success,
|
|
123
|
-
reason: n.UploadCompleted,
|
|
124
|
-
folder: w || g
|
|
125
|
-
})), x([m]), S(), E.current = null, T(null);
|
|
126
|
-
})();
|
|
127
|
-
}, [
|
|
128
|
-
v,
|
|
129
|
-
p,
|
|
130
|
-
y,
|
|
131
|
-
g,
|
|
132
|
-
C,
|
|
133
|
-
f,
|
|
134
|
-
b,
|
|
135
|
-
x,
|
|
136
|
-
S,
|
|
137
|
-
D
|
|
138
|
-
]),
|
|
139
|
-
onUploadArchive: s((e, t, n) => {
|
|
140
|
-
D(e, t, n);
|
|
141
|
-
}, [D]),
|
|
142
|
-
onValidateUpload: s(async (t, n, r) => {
|
|
143
|
-
for (let n of t) n.name = e(n.name);
|
|
144
|
-
return { valid: !0 };
|
|
145
|
-
}, []),
|
|
146
|
-
uploadBatchState: w,
|
|
149
|
+
onUploadFiles: A,
|
|
150
|
+
onUploadArchive: j,
|
|
151
|
+
onValidateUpload: M,
|
|
152
|
+
uploadBatchState: E,
|
|
147
153
|
cancelUpload: s(() => {
|
|
148
|
-
|
|
154
|
+
for (let e of O.current.values()) e.abort();
|
|
149
155
|
}, []),
|
|
156
|
+
cancelUploadFile: N,
|
|
150
157
|
clearUploadBatch: s(() => {
|
|
151
|
-
|
|
158
|
+
D(null);
|
|
152
159
|
}, [])
|
|
153
160
|
};
|
|
154
161
|
};
|
|
155
162
|
//#endregion
|
|
156
|
-
export {
|
|
163
|
+
export { x as useDialFileUploadBatch };
|
package/index.d.ts
CHANGED
|
@@ -141,6 +141,7 @@ import { SkillEditorFileActions } from '@epam/ai-dial-skill-editor';
|
|
|
141
141
|
import { SkillEditorValues } from '@epam/ai-dial-skill-editor';
|
|
142
142
|
import { SkillFileBatchError } from '@epam/ai-dial-skill-editor';
|
|
143
143
|
import { SkillFileListResponseDto } from '@epam/ai-dial-chat-api-client';
|
|
144
|
+
import { SkillFileSourceEntry } from '@epam/ai-dial-skill-editor';
|
|
144
145
|
import { SkillFileTreeNode } from '@epam/ai-dial-skill-editor';
|
|
145
146
|
import { SkillFileUploadCandidate } from '@epam/ai-dial-skill-editor';
|
|
146
147
|
import { SkillFileValidationResult } from '@epam/ai-dial-skill-editor';
|
|
@@ -181,6 +182,7 @@ export declare interface AgentCapabilities {
|
|
|
181
182
|
hasConfiguration?: boolean;
|
|
182
183
|
hasChatCompletion?: boolean;
|
|
183
184
|
hasResponsesApi?: boolean;
|
|
185
|
+
hasSkills?: boolean;
|
|
184
186
|
}
|
|
185
187
|
|
|
186
188
|
/** Input-attachment configuration for an agent (application) deployment. */
|
|
@@ -991,6 +993,12 @@ export declare interface CreateChatStreamApiDeps {
|
|
|
991
993
|
getTimezone?: () => string | undefined;
|
|
992
994
|
/** `fetch` implementation to issue requests through. Defaults to the global `fetch`. */
|
|
993
995
|
fetchImpl?: typeof fetch;
|
|
996
|
+
/**
|
|
997
|
+
* How long an open completion stream may go without receiving a byte
|
|
998
|
+
* (keepalive comments included) before it is reported as a
|
|
999
|
+
* {@link StreamInterruptedError}. Defaults to {@link DEFAULT_STREAM_IDLE_TIMEOUT_MS}.
|
|
1000
|
+
*/
|
|
1001
|
+
idleTimeoutMs?: number;
|
|
994
1002
|
}
|
|
995
1003
|
|
|
996
1004
|
/**
|
|
@@ -1145,6 +1153,8 @@ export declare const DEFAULT_GENERATION_PERSISTENCE_ERROR_MESSAGE = "The respons
|
|
|
1145
1153
|
*/
|
|
1146
1154
|
export declare const DEFAULT_MAX_ARCHIVE_BYTES: number;
|
|
1147
1155
|
|
|
1156
|
+
export declare const DEFAULT_STREAM_IDLE_TIMEOUT_MS = 45000;
|
|
1157
|
+
|
|
1148
1158
|
/** Translated folder-path labels for the Personal/Shared/Public deployment groupings. */
|
|
1149
1159
|
export declare interface DeploymentFolderLabels {
|
|
1150
1160
|
personal: string;
|
|
@@ -1583,8 +1593,6 @@ export declare type FileNameValidationError = {
|
|
|
1583
1593
|
} | {
|
|
1584
1594
|
reason: FileNameValidationErrorReason.DuplicateName;
|
|
1585
1595
|
existingName: string;
|
|
1586
|
-
} | {
|
|
1587
|
-
reason: FileNameValidationErrorReason.LeadingDot;
|
|
1588
1596
|
};
|
|
1589
1597
|
|
|
1590
1598
|
/**
|
|
@@ -1597,8 +1605,7 @@ export declare enum FileNameValidationErrorReason {
|
|
|
1597
1605
|
ForbiddenSymbols = "forbiddenSymbols",
|
|
1598
1606
|
ReservedName = "reservedName",
|
|
1599
1607
|
TooLong = "tooLong",
|
|
1600
|
-
DuplicateName = "duplicateName"
|
|
1601
|
-
LeadingDot = "leadingDot"
|
|
1608
|
+
DuplicateName = "duplicateName"
|
|
1602
1609
|
}
|
|
1603
1610
|
|
|
1604
1611
|
/**
|
|
@@ -1615,7 +1622,10 @@ export declare enum FileOperationKind {
|
|
|
1615
1622
|
FileCopied = "fileCopied",
|
|
1616
1623
|
FilesCopied = "filesCopied",
|
|
1617
1624
|
FileMoved = "fileMoved",
|
|
1618
|
-
FilesMoved = "filesMoved"
|
|
1625
|
+
FilesMoved = "filesMoved",
|
|
1626
|
+
/** A copy whose every item landed in its own source folder (Duplicate). */
|
|
1627
|
+
FileDuplicated = "fileDuplicated",
|
|
1628
|
+
FilesDuplicated = "filesDuplicated"
|
|
1619
1629
|
}
|
|
1620
1630
|
|
|
1621
1631
|
/**
|
|
@@ -1630,13 +1640,15 @@ export declare interface FileOperationSuccessEvent {
|
|
|
1630
1640
|
name?: string;
|
|
1631
1641
|
/** Number of items the operation covered, when applicable. */
|
|
1632
1642
|
count?: number;
|
|
1633
|
-
/**
|
|
1643
|
+
/**
|
|
1644
|
+
* Destination folder as a slash-joined virtual path starting at the root
|
|
1645
|
+
* label (e.g. `My files/reports`), for copy/move/duplicate operations.
|
|
1646
|
+
*/
|
|
1634
1647
|
destinationFolderName?: string;
|
|
1635
1648
|
/**
|
|
1636
|
-
* Whether the affected item is a folder rather than a file.
|
|
1637
|
-
*
|
|
1638
|
-
*
|
|
1639
|
-
* "File renamed").
|
|
1649
|
+
* Whether the affected item is a folder rather than a file. Set for rename,
|
|
1650
|
+
* copy, move, and duplicate events; on a multi-item event it describes the
|
|
1651
|
+
* first successfully affected item (the one `name` refers to).
|
|
1640
1652
|
*/
|
|
1641
1653
|
isFolder?: boolean;
|
|
1642
1654
|
}
|
|
@@ -1859,6 +1871,9 @@ export declare const getQuickAppConversationStarters: (conversationStarters: unk
|
|
|
1859
1871
|
*/
|
|
1860
1872
|
export declare const getRemainingCharacters: (value: string, maxLength: number) => number | null;
|
|
1861
1873
|
|
|
1874
|
+
/** Returns the limit each over-long skill field exceeds, keyed by field; fields within their limit are omitted. */
|
|
1875
|
+
export declare const getSkillFieldLengthViolations: (values: Record<SkillTextField, string>) => Partial<Record<SkillTextField, number>>;
|
|
1876
|
+
|
|
1862
1877
|
/**
|
|
1863
1878
|
* Returns the text to start/populate a conversation from a selected starter button.
|
|
1864
1879
|
* `description` (the schema property's shared intro/question text) is used only
|
|
@@ -2521,6 +2536,15 @@ export declare enum McpResourceKind {
|
|
|
2521
2536
|
|
|
2522
2537
|
export declare const mergeCreatedFolderIntoCache: (cache: Map<string, ListFilesItemDto[]>, parentApiPath: string, created: CreateFolderResponseDto, inheritedPermissions?: string[]) => Map<string, ListFilesItemDto[]>;
|
|
2523
2538
|
|
|
2539
|
+
/**
|
|
2540
|
+
* Merges a freshly-fetched page 0 into the currently-loaded run list: an
|
|
2541
|
+
* already-known id is replaced in place at its existing array position, an
|
|
2542
|
+
* unseen id is prepended (upstream order is `created_at desc`, so it is the
|
|
2543
|
+
* newest), and an id absent from `incoming` is left untouched — a background
|
|
2544
|
+
* refresh never removes a loaded run.
|
|
2545
|
+
*/
|
|
2546
|
+
export declare const mergeRunsById: (current: ScheduledTaskRunDto[], incoming: ScheduledTaskRunDto[]) => ScheduledTaskRunDto[];
|
|
2547
|
+
|
|
2524
2548
|
/**
|
|
2525
2549
|
* Merges incoming stage deltas into an existing stage list, keyed by `index`.
|
|
2526
2550
|
*
|
|
@@ -2598,6 +2622,7 @@ export declare interface ModelCapabilities {
|
|
|
2598
2622
|
hasResume?: boolean;
|
|
2599
2623
|
hasChatCompletion?: boolean;
|
|
2600
2624
|
hasResponsesApi?: boolean;
|
|
2625
|
+
hasSkills?: boolean;
|
|
2601
2626
|
reasoningEfforts?: string[];
|
|
2602
2627
|
}
|
|
2603
2628
|
|
|
@@ -3581,6 +3606,9 @@ export declare const SKILL_MANIFEST_FILE = "SKILL.md";
|
|
|
3581
3606
|
*/
|
|
3582
3607
|
export declare const SKILL_MANIFEST_MAX_BYTES: number;
|
|
3583
3608
|
|
|
3609
|
+
/** Length limit of each skill editor text field. */
|
|
3610
|
+
export declare const SKILL_TEXT_FIELD_MAX_LENGTHS: Record<SkillTextField, number>;
|
|
3611
|
+
|
|
3584
3612
|
/**
|
|
3585
3613
|
* Client-side mirror of the backend's default `SKILL_UPLOAD_MAX_FILES`
|
|
3586
3614
|
* (`apps/chat-api/src/config/environment.config.ts`), used only for
|
|
@@ -3689,6 +3717,8 @@ export declare interface SkillEditorSubmitClient {
|
|
|
3689
3717
|
export declare interface SkillEditorSubmitMessages {
|
|
3690
3718
|
/** Shown when a required field is empty. */
|
|
3691
3719
|
required: string;
|
|
3720
|
+
/** Shown when a name, description or instructions value exceeds its length limit, given that limit. */
|
|
3721
|
+
tooLong: (maxLength: number) => string;
|
|
3692
3722
|
/**
|
|
3693
3723
|
* Shown when the Instructions value opens with its own YAML frontmatter
|
|
3694
3724
|
* block — pasting a whole `SKILL.md` in there would otherwise produce a
|
|
@@ -3895,6 +3925,9 @@ export declare enum SkillSource {
|
|
|
3895
3925
|
Public = "public"
|
|
3896
3926
|
}
|
|
3897
3927
|
|
|
3928
|
+
/** Skill editor text fields with a length limit. */
|
|
3929
|
+
export declare type SkillTextField = 'name' | 'description' | 'instructions';
|
|
3930
|
+
|
|
3898
3931
|
/** Splits a file name into its base and extension, using only the last dot. */
|
|
3899
3932
|
export declare const splitFileNameExtension: (fileName: string) => {
|
|
3900
3933
|
base: string;
|
|
@@ -3931,6 +3964,18 @@ export declare interface StreamCompletionOptions {
|
|
|
3931
3964
|
signal: AbortSignal;
|
|
3932
3965
|
}
|
|
3933
3966
|
|
|
3967
|
+
/**
|
|
3968
|
+
* Reported through `onError` when the network connection carrying a
|
|
3969
|
+
* completion stream is lost (a rejected `fetch`, or a read that fails after a
|
|
3970
|
+
* 2xx response) or goes silent past the idle timeout — what a laptop sleep or
|
|
3971
|
+
* a phone lock mid-generation produces. The backend-owned generation may
|
|
3972
|
+
* still be running, so the caller can recover it rather than treat the
|
|
3973
|
+
* response as failed. `cause` holds the original error, when there is one.
|
|
3974
|
+
*/
|
|
3975
|
+
export declare class StreamInterruptedError extends Error {
|
|
3976
|
+
constructor(cause?: unknown);
|
|
3977
|
+
}
|
|
3978
|
+
|
|
3934
3979
|
/**
|
|
3935
3980
|
* Reported through `onError` when DIAL Core itself signals a failure with an
|
|
3936
3981
|
* in-band `{ error: { message } }` SSE chunk. Its `message` is upstream text
|
|
@@ -4314,7 +4359,7 @@ export declare enum UnsupportedTriggerReason {
|
|
|
4314
4359
|
MissingRequiredFields = "missingRequiredFields"
|
|
4315
4360
|
}
|
|
4316
4361
|
|
|
4317
|
-
export declare const updateEntry: (prev: FileUploadBatchState | null,
|
|
4362
|
+
export declare const updateEntry: (prev: FileUploadBatchState | null, id: string, patch: FileUploadStatus | Partial<Pick<FileUploadEntry, "status" | "percent">>) => FileUploadBatchState | null;
|
|
4318
4363
|
|
|
4319
4364
|
/** Max number of files uploaded concurrently within a single upload batch. */
|
|
4320
4365
|
export declare const UPLOAD_CONCURRENCY = 3;
|
|
@@ -5251,7 +5296,9 @@ export declare interface UseDialFileManagerResult {
|
|
|
5251
5296
|
uploadBatchState: FileUploadBatchState | null;
|
|
5252
5297
|
/** Upload: abort all in-flight and queued uploads. */
|
|
5253
5298
|
cancelUpload: () => void;
|
|
5254
|
-
/** Upload:
|
|
5299
|
+
/** Upload: abort one queued or in-flight upload by its entry id. */
|
|
5300
|
+
cancelUploadFile: (id: string) => void;
|
|
5301
|
+
/** Upload: empty the upload queue. */
|
|
5255
5302
|
clearUploadBatch: () => void;
|
|
5256
5303
|
/** Folder creation: called when user confirms a new folder name. */
|
|
5257
5304
|
onCreateFolder: (file: DialUploadFileItem, folderPath: string, fileId: string) => Promise<void>;
|
|
@@ -5318,7 +5365,7 @@ export declare interface UseDialFileManagerResult {
|
|
|
5318
5365
|
/**
|
|
5319
5366
|
* True while any mutating file-manager operation is in flight: the OR of
|
|
5320
5367
|
* `isCreatingFolder`, `isDownloading`, `isDeleting`, `isRenaming`, `isCopying`,
|
|
5321
|
-
* `isMoving`, `isUnsharing`, `isRemovingAccess`, and
|
|
5368
|
+
* `isMoving`, `isUnsharing`, `isRemovingAccess`, and any upload still queued or running.
|
|
5322
5369
|
*
|
|
5323
5370
|
* Deliberately excludes three flags, each already fully contained by its own
|
|
5324
5371
|
* scoped loading UI:
|
|
@@ -5464,10 +5511,11 @@ export declare interface UseDialFileSharingResult {
|
|
|
5464
5511
|
|
|
5465
5512
|
/**
|
|
5466
5513
|
* Manages upload batches (single-file and ZIP-archive extraction), including
|
|
5467
|
-
* concurrency-limited progress tracking and abort.
|
|
5468
|
-
*
|
|
5469
|
-
* `
|
|
5470
|
-
* cache
|
|
5514
|
+
* concurrency-limited progress tracking and per-file abort. A batch started
|
|
5515
|
+
* while another is on screen is appended to it, and settled entries stay in
|
|
5516
|
+
* `uploadBatchState` until `clearUploadBatch`. Invalidates the shared listing
|
|
5517
|
+
* cache for the destination folder through `invalidateFolders`/`bumpRetry`
|
|
5518
|
+
* after a batch settles — it never holds its own copy of the cache.
|
|
5471
5519
|
*/
|
|
5472
5520
|
export declare const useDialFileUploadBatch: ({ filesApi, bucket, rootLabel, activeTab, cache, sharedRootMetaRef, invalidateFolders, bumpRetry, onNotification, }: UseDialFileUploadBatchOptions) => UseDialFileUploadBatchResult;
|
|
5473
5521
|
|
|
@@ -5500,6 +5548,7 @@ export declare interface UseDialFileUploadBatchResult {
|
|
|
5500
5548
|
onValidateUpload: (files: DialUploadFileItem[], existingFiles: DialFile[], destinationFolder: string) => Promise<FileUploadValidationResult>;
|
|
5501
5549
|
uploadBatchState: FileUploadBatchState | null;
|
|
5502
5550
|
cancelUpload: () => void;
|
|
5551
|
+
cancelUploadFile: (id: string) => void;
|
|
5503
5552
|
clearUploadBatch: () => void;
|
|
5504
5553
|
}
|
|
5505
5554
|
|
|
@@ -5902,8 +5951,8 @@ export declare interface UsePublishFoldersResult {
|
|
|
5902
5951
|
hasPublishWriteAccess: (folderPath: string[]) => boolean;
|
|
5903
5952
|
}
|
|
5904
5953
|
|
|
5905
|
-
/** Shared, cancellation-safe pagination for one schedule's run history. */
|
|
5906
|
-
export declare const useScheduledTaskRuns: (client: ScheduledTasksApiClient, { scheduleId, enabled, pageSize }: UseScheduledTaskRunsOptions) => {
|
|
5954
|
+
/** Shared, cancellation-safe pagination and background refresh for one schedule's run history. */
|
|
5955
|
+
export declare const useScheduledTaskRuns: (client: ScheduledTasksApiClient, { scheduleId, enabled, pageSize, nextRunTime, }: UseScheduledTaskRunsOptions) => {
|
|
5907
5956
|
items: ScheduledTaskRunDto[];
|
|
5908
5957
|
isLoading: boolean;
|
|
5909
5958
|
isLoadingMore: boolean;
|
|
@@ -5919,6 +5968,12 @@ export declare interface UseScheduledTaskRunsOptions {
|
|
|
5919
5968
|
scheduleId: string;
|
|
5920
5969
|
enabled?: boolean;
|
|
5921
5970
|
pageSize?: number;
|
|
5971
|
+
/**
|
|
5972
|
+
* The task's next scheduled run time (ISO string), when known. Drives the
|
|
5973
|
+
* one-shot background refresh described on {@link useScheduledTaskRuns}.
|
|
5974
|
+
* The caller already holds the task DTO — this hook never fetches it.
|
|
5975
|
+
*/
|
|
5976
|
+
nextRunTime?: string | null;
|
|
5922
5977
|
}
|
|
5923
5978
|
|
|
5924
5979
|
/** Shared scheduler-list lifecycle with generation-scoped stale-response guards. */
|
|
@@ -6192,10 +6247,11 @@ export declare interface UseSkillEditorSubmitResult {
|
|
|
6192
6247
|
/**
|
|
6193
6248
|
* Owns the Skill Editor's batch file upload workflow: validating a staged
|
|
6194
6249
|
* batch, committing it atomically (supporting files plus an optional
|
|
6195
|
-
* `SKILL.md` manifest import, with a confirmation gate),
|
|
6250
|
+
* `SKILL.md` manifest import, with a confirmation gate), creating empty
|
|
6251
|
+
* folders, expanding `.zip` archives for staging, and removing
|
|
6196
6252
|
* already-committed nodes.
|
|
6197
6253
|
*/
|
|
6198
|
-
export declare const useSkillFileActions: ({ files, setFiles, filesContentRef, frontmatterRef, loadedValues, setLoadedValues, isEditMode, isDirty, setSelectedPath, messages, }: UseSkillFileActionsParams) => UseSkillFileActionsResult;
|
|
6254
|
+
export declare const useSkillFileActions: ({ files, setFiles, filesContentRef, frontmatterRef, loadedValues, setLoadedValues, isEditMode, isDirty, setSelectedPath, messages, pickFromFileSystem, }: UseSkillFileActionsParams) => UseSkillFileActionsResult;
|
|
6199
6255
|
|
|
6200
6256
|
/** Parameters accepted by {@link useSkillFileActions}. */
|
|
6201
6257
|
export declare interface UseSkillFileActionsParams {
|
|
@@ -6219,6 +6275,12 @@ export declare interface UseSkillFileActionsParams {
|
|
|
6219
6275
|
setSelectedPath: Dispatch<SetStateAction<string>>;
|
|
6220
6276
|
/** Localized messages, resolved by the host. */
|
|
6221
6277
|
messages: SkillFileActionsMessages;
|
|
6278
|
+
/**
|
|
6279
|
+
* Opens the host's file-system picker; passed through unchanged as
|
|
6280
|
+
* `fileActions.pickFromFileSystem`. Omit to hide the editor's "Open DIAL
|
|
6281
|
+
* file system" entry.
|
|
6282
|
+
*/
|
|
6283
|
+
pickFromFileSystem?: () => Promise<SkillFileSourceEntry[] | undefined>;
|
|
6222
6284
|
}
|
|
6223
6285
|
|
|
6224
6286
|
/** Return value of {@link useSkillFileActions}. */
|