@burtson-labs/bandit-engine 2.1.2 → 2.1.3
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/CHANGELOG.md +11 -0
- package/dist/SchedulesTab-YZG3P2GW.mjs +544 -0
- package/dist/SchedulesTab-YZG3P2GW.mjs.map +1 -0
- package/dist/aiProviderStore-ANPQVHGD.mjs +9 -0
- package/dist/chat-W7MDFESE.mjs +15 -0
- package/dist/chunk-4LLCLYLH.mjs +13 -0
- package/dist/chunk-4LLCLYLH.mjs.map +1 -0
- package/dist/chunk-62H3OLTV.mjs +582 -0
- package/dist/chunk-62H3OLTV.mjs.map +1 -0
- package/dist/{chunk-FCQN3LKT.mjs → chunk-6CSFKF34.mjs} +9 -16
- package/dist/chunk-6CSFKF34.mjs.map +1 -0
- package/dist/chunk-DH5A2HT2.mjs +289 -0
- package/dist/chunk-DH5A2HT2.mjs.map +1 -0
- package/dist/{chunk-3UABXOPF.mjs → chunk-GX4FVZNA.mjs} +9 -225
- package/dist/chunk-GX4FVZNA.mjs.map +1 -0
- package/dist/chunk-LMAQWR7Z.mjs +388 -0
- package/dist/chunk-LMAQWR7Z.mjs.map +1 -0
- package/dist/chunk-PSI7RQ54.mjs +1315 -0
- package/dist/chunk-PSI7RQ54.mjs.map +1 -0
- package/dist/chunk-S3DWWUBD.mjs +224 -0
- package/dist/chunk-S3DWWUBD.mjs.map +1 -0
- package/dist/{chunk-WX2HUL3Y.mjs → chunk-W2D454CZ.mjs} +2638 -4183
- package/dist/chunk-W2D454CZ.mjs.map +1 -0
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +4098 -2813
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1540 -1793
- package/dist/index.mjs.map +1 -1
- package/dist/modelStore-FIVOSLFY.mjs +9 -0
- package/dist/schedule-confirm-card-N4TKLEHL.mjs +292 -0
- package/dist/schedule-confirm-card-N4TKLEHL.mjs.map +1 -0
- package/package.json +1 -1
- package/dist/aiProviderStore-OLMQHX7E.mjs +0 -8
- package/dist/chat-7K5TKTRM.mjs +0 -10
- package/dist/chunk-3UABXOPF.mjs.map +0 -1
- package/dist/chunk-FCQN3LKT.mjs.map +0 -1
- package/dist/chunk-WX2HUL3Y.mjs.map +0 -1
- package/dist/modelStore-SEC34WRM.mjs +0 -8
- /package/dist/{aiProviderStore-OLMQHX7E.mjs.map → aiProviderStore-ANPQVHGD.mjs.map} +0 -0
- /package/dist/{chat-7K5TKTRM.mjs.map → chat-W7MDFESE.mjs.map} +0 -0
- /package/dist/{modelStore-SEC34WRM.mjs.map → modelStore-FIVOSLFY.mjs.map} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
Notable changes to `@burtson-labs/bandit-engine`. Versions follow semver.
|
|
4
4
|
|
|
5
|
+
## 2.1.3
|
|
6
|
+
|
|
7
|
+
### Chat
|
|
8
|
+
|
|
9
|
+
- Scheduled tasks. The model can set up a recurring prompt with the new `create_schedule` tool ("every weekday at 8:00, summarise AI news and email me"). It never creates one silently: a confirmation card shows the name, timing, time zone, prompt and delivery, the person can correct any of it, and the gateway's preview shows the next run before they press Create. The tool call appears on the tool trail ("Scheduled: Morning AI brief" or "Schedule not created").
|
|
10
|
+
- `/chat?conversation=<id>` opens that conversation, fetching it from the gateway when this device has not synced it (the "Open in Bandit" link in a scheduled run's email).
|
|
11
|
+
|
|
12
|
+
### Management
|
|
13
|
+
|
|
14
|
+
- A Schedules section for every signed-in person: list with pause, resume, run now, edit and delete, a form for new schedules with the gateway's preview of the next run, the plan's active-schedule cap, and recent results with a link into the saved conversation. Loaded with its first visit; the chat drawer gets a shortcut to it.
|
|
15
|
+
|
|
5
16
|
## 2.1.2
|
|
6
17
|
|
|
7
18
|
### Chat
|
|
@@ -0,0 +1,544 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ManagementEmptyState
|
|
3
|
+
} from "./chunk-DH5A2HT2.mjs";
|
|
4
|
+
import {
|
|
5
|
+
Edit,
|
|
6
|
+
Plus,
|
|
7
|
+
Refresh,
|
|
8
|
+
StreamingMarkdown_default,
|
|
9
|
+
Trash
|
|
10
|
+
} from "./chunk-PSI7RQ54.mjs";
|
|
11
|
+
import {
|
|
12
|
+
browserTimeZone,
|
|
13
|
+
createSchedule,
|
|
14
|
+
deleteSchedule,
|
|
15
|
+
describeSchedule,
|
|
16
|
+
formatInZone,
|
|
17
|
+
getScheduleRun,
|
|
18
|
+
listRecentScheduleRuns,
|
|
19
|
+
listSchedules,
|
|
20
|
+
pauseSchedule,
|
|
21
|
+
previewSchedule,
|
|
22
|
+
resumeSchedule,
|
|
23
|
+
runScheduleNow,
|
|
24
|
+
updateSchedule
|
|
25
|
+
} from "./chunk-LMAQWR7Z.mjs";
|
|
26
|
+
import "./chunk-4LLCLYLH.mjs";
|
|
27
|
+
import "./chunk-S3DWWUBD.mjs";
|
|
28
|
+
import "./chunk-NI7BKLC7.mjs";
|
|
29
|
+
|
|
30
|
+
// src/management/components/SchedulesTab.tsx
|
|
31
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
32
|
+
import {
|
|
33
|
+
Alert,
|
|
34
|
+
Box,
|
|
35
|
+
Button,
|
|
36
|
+
Chip,
|
|
37
|
+
CircularProgress,
|
|
38
|
+
Collapse,
|
|
39
|
+
FormControlLabel,
|
|
40
|
+
IconButton,
|
|
41
|
+
Link,
|
|
42
|
+
MenuItem,
|
|
43
|
+
Paper,
|
|
44
|
+
Skeleton,
|
|
45
|
+
Stack,
|
|
46
|
+
Switch,
|
|
47
|
+
TextField,
|
|
48
|
+
Tooltip,
|
|
49
|
+
Typography
|
|
50
|
+
} from "@mui/material";
|
|
51
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
52
|
+
var PRESETS = [
|
|
53
|
+
{ value: "daily", label: "Every day" },
|
|
54
|
+
{ value: "weekdays", label: "Weekdays" },
|
|
55
|
+
{ value: "weekly", label: "Weekly" },
|
|
56
|
+
{ value: "custom", label: "Custom (cron)" }
|
|
57
|
+
];
|
|
58
|
+
var WEEKDAYS = ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"];
|
|
59
|
+
var emptyForm = (timeZone, model) => ({
|
|
60
|
+
name: "",
|
|
61
|
+
prompt: "",
|
|
62
|
+
preset: "weekdays",
|
|
63
|
+
time: "08:00",
|
|
64
|
+
timeZone,
|
|
65
|
+
model,
|
|
66
|
+
webSearch: true,
|
|
67
|
+
deliverEmail: true
|
|
68
|
+
});
|
|
69
|
+
var fromSchedule = (s) => ({
|
|
70
|
+
name: s.name,
|
|
71
|
+
prompt: s.prompt,
|
|
72
|
+
preset: s.preset,
|
|
73
|
+
time: s.time ?? void 0,
|
|
74
|
+
weekday: s.weekday === null || s.weekday === void 0 ? void 0 : WEEKDAYS[(s.weekday + 6) % 7],
|
|
75
|
+
cron: s.preset === "custom" ? s.cron : void 0,
|
|
76
|
+
timeZone: s.timeZone,
|
|
77
|
+
model: s.model,
|
|
78
|
+
webSearch: s.webSearch,
|
|
79
|
+
deliverEmail: s.deliverEmail
|
|
80
|
+
});
|
|
81
|
+
var errorText = (e, fallback) => e instanceof Error && e.message ? e.message : fallback;
|
|
82
|
+
var statusLabel = (run) => run.status === "succeeded" ? "Done" : run.status === "failed" ? "Failed" : run.status === "skipped" ? "Skipped" : "Running";
|
|
83
|
+
var statusColor = (status) => status === "succeeded" ? "success" : status === "failed" ? "error" : status === "skipped" ? "warning" : "default";
|
|
84
|
+
var SchedulesTab = ({ showSnackbar, chatPath = "/chat" }) => {
|
|
85
|
+
const [schedules, setSchedules] = useState([]);
|
|
86
|
+
const [limits, setLimits] = useState(null);
|
|
87
|
+
const [runs, setRuns] = useState([]);
|
|
88
|
+
const [loading, setLoading] = useState(true);
|
|
89
|
+
const [loadError, setLoadError] = useState(null);
|
|
90
|
+
const [busy, setBusy] = useState({});
|
|
91
|
+
const [form, setForm] = useState(null);
|
|
92
|
+
const [editingId, setEditingId] = useState(null);
|
|
93
|
+
const [formError, setFormError] = useState(null);
|
|
94
|
+
const [saving, setSaving] = useState(false);
|
|
95
|
+
const [preview, setPreview] = useState(null);
|
|
96
|
+
const [previewError, setPreviewError] = useState(null);
|
|
97
|
+
const [openRun, setOpenRun] = useState(null);
|
|
98
|
+
const pollTimer = useRef(null);
|
|
99
|
+
const formRef = useRef(null);
|
|
100
|
+
const notify = useCallback(
|
|
101
|
+
(message, severity = "success") => showSnackbar?.(message, severity),
|
|
102
|
+
[showSnackbar]
|
|
103
|
+
);
|
|
104
|
+
const refresh = useCallback(async (quiet = false) => {
|
|
105
|
+
if (!quiet) setLoading(true);
|
|
106
|
+
try {
|
|
107
|
+
const [list, recent] = await Promise.all([listSchedules(), listRecentScheduleRuns(20)]);
|
|
108
|
+
setSchedules(list.schedules);
|
|
109
|
+
setLimits(list.limits);
|
|
110
|
+
setRuns(recent);
|
|
111
|
+
setLoadError(null);
|
|
112
|
+
} catch (e) {
|
|
113
|
+
setLoadError(errorText(e, "Couldn't load your schedules. The gateway didn't respond."));
|
|
114
|
+
} finally {
|
|
115
|
+
setLoading(false);
|
|
116
|
+
}
|
|
117
|
+
}, []);
|
|
118
|
+
useEffect(() => {
|
|
119
|
+
void refresh();
|
|
120
|
+
return () => {
|
|
121
|
+
if (pollTimer.current) clearTimeout(pollTimer.current);
|
|
122
|
+
};
|
|
123
|
+
}, [refresh]);
|
|
124
|
+
useEffect(() => {
|
|
125
|
+
try {
|
|
126
|
+
const id = new URLSearchParams(window.location.search).get("run");
|
|
127
|
+
if (!id) return;
|
|
128
|
+
getScheduleRun(id).then((run) => {
|
|
129
|
+
setRuns((prev) => prev.some((r) => r.id === run.id) ? prev : [run, ...prev]);
|
|
130
|
+
setOpenRun(run.id);
|
|
131
|
+
}).catch(() => void 0);
|
|
132
|
+
} catch {
|
|
133
|
+
}
|
|
134
|
+
}, []);
|
|
135
|
+
const anyRunning = useMemo(
|
|
136
|
+
() => schedules.some((s) => s.runRequested) || runs.some((r) => r.status === "running"),
|
|
137
|
+
[schedules, runs]
|
|
138
|
+
);
|
|
139
|
+
useEffect(() => {
|
|
140
|
+
if (!anyRunning) return;
|
|
141
|
+
pollTimer.current = setTimeout(() => void refresh(true), 5e3);
|
|
142
|
+
return () => {
|
|
143
|
+
if (pollTimer.current) clearTimeout(pollTimer.current);
|
|
144
|
+
};
|
|
145
|
+
}, [anyRunning, schedules, runs, refresh]);
|
|
146
|
+
const timing = form ? { preset: form.preset, time: form.time, weekday: form.weekday, cron: form.cron, timeZone: form.timeZone } : null;
|
|
147
|
+
const timingKey = timing ? JSON.stringify(timing) : "";
|
|
148
|
+
useEffect(() => {
|
|
149
|
+
if (!timing) return;
|
|
150
|
+
if (timing.preset === "custom" ? !timing.cron : !timing.time) return;
|
|
151
|
+
let cancelled = false;
|
|
152
|
+
const handle = setTimeout(() => {
|
|
153
|
+
previewSchedule(timing).then((p) => {
|
|
154
|
+
if (cancelled) return;
|
|
155
|
+
setPreviewError(null);
|
|
156
|
+
setPreview(`${p.description}${p.next[0] ? ` \xB7 next run ${formatInZone(p.next[0], p.timeZone)}` : ""}`);
|
|
157
|
+
}).catch((e) => {
|
|
158
|
+
if (cancelled) return;
|
|
159
|
+
setPreview(null);
|
|
160
|
+
setPreviewError(errorText(e, "This schedule is not valid."));
|
|
161
|
+
});
|
|
162
|
+
}, 250);
|
|
163
|
+
return () => {
|
|
164
|
+
cancelled = true;
|
|
165
|
+
clearTimeout(handle);
|
|
166
|
+
};
|
|
167
|
+
}, [timingKey]);
|
|
168
|
+
const withBusy = async (id, work, failure) => {
|
|
169
|
+
setBusy((b) => ({ ...b, [id]: true }));
|
|
170
|
+
try {
|
|
171
|
+
await work();
|
|
172
|
+
} catch (e) {
|
|
173
|
+
notify(errorText(e, failure), "error");
|
|
174
|
+
} finally {
|
|
175
|
+
setBusy((b) => ({ ...b, [id]: false }));
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
const openNew = () => {
|
|
179
|
+
setEditingId(null);
|
|
180
|
+
setForm(emptyForm(browserTimeZone(), limits?.defaultModel));
|
|
181
|
+
setFormError(null);
|
|
182
|
+
setPreview(null);
|
|
183
|
+
setPreviewError(null);
|
|
184
|
+
requestAnimationFrame(() => formRef.current?.scrollIntoView?.({ behavior: "smooth", block: "nearest" }));
|
|
185
|
+
};
|
|
186
|
+
const openEdit = (s) => {
|
|
187
|
+
setEditingId(s.id);
|
|
188
|
+
setForm(fromSchedule(s));
|
|
189
|
+
setFormError(null);
|
|
190
|
+
setPreview(null);
|
|
191
|
+
setPreviewError(null);
|
|
192
|
+
requestAnimationFrame(() => formRef.current?.scrollIntoView?.({ behavior: "smooth", block: "nearest" }));
|
|
193
|
+
};
|
|
194
|
+
const closeForm = () => {
|
|
195
|
+
setForm(null);
|
|
196
|
+
setEditingId(null);
|
|
197
|
+
setFormError(null);
|
|
198
|
+
};
|
|
199
|
+
const submitForm = async () => {
|
|
200
|
+
if (!form) return;
|
|
201
|
+
setSaving(true);
|
|
202
|
+
setFormError(null);
|
|
203
|
+
const payload = {
|
|
204
|
+
...form,
|
|
205
|
+
name: form.name.trim(),
|
|
206
|
+
prompt: form.prompt.trim(),
|
|
207
|
+
time: form.preset === "custom" ? void 0 : form.time,
|
|
208
|
+
weekday: form.preset === "weekly" ? form.weekday : void 0,
|
|
209
|
+
cron: form.preset === "custom" ? form.cron?.trim() : void 0
|
|
210
|
+
};
|
|
211
|
+
try {
|
|
212
|
+
if (editingId) {
|
|
213
|
+
const updated = await updateSchedule(editingId, payload);
|
|
214
|
+
setSchedules((prev) => prev.map((s) => s.id === updated.id ? updated : s));
|
|
215
|
+
notify("Schedule updated.");
|
|
216
|
+
} else {
|
|
217
|
+
const created = await createSchedule(payload);
|
|
218
|
+
setSchedules((prev) => [created, ...prev]);
|
|
219
|
+
setLimits((l) => l ? { ...l, active: l.active + (created.status === "active" ? 1 : 0) } : l);
|
|
220
|
+
notify("Schedule created.");
|
|
221
|
+
}
|
|
222
|
+
closeForm();
|
|
223
|
+
} catch (e) {
|
|
224
|
+
setFormError(errorText(e, "The schedule could not be saved."));
|
|
225
|
+
} finally {
|
|
226
|
+
setSaving(false);
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
const togglePause = (s) => withBusy(
|
|
230
|
+
s.id,
|
|
231
|
+
async () => {
|
|
232
|
+
const next = s.status === "active" ? await pauseSchedule(s.id) : await resumeSchedule(s.id);
|
|
233
|
+
setSchedules((prev) => prev.map((x) => x.id === next.id ? next : x));
|
|
234
|
+
setLimits((l) => l ? { ...l, active: l.active + (next.status === "active" ? 1 : -1) } : l);
|
|
235
|
+
notify(next.status === "active" ? "Schedule resumed." : "Schedule paused.");
|
|
236
|
+
},
|
|
237
|
+
"The schedule could not be changed."
|
|
238
|
+
);
|
|
239
|
+
const runNow = (s) => withBusy(
|
|
240
|
+
s.id,
|
|
241
|
+
async () => {
|
|
242
|
+
await runScheduleNow(s.id);
|
|
243
|
+
setSchedules((prev) => prev.map((x) => x.id === s.id ? { ...x, runRequested: true } : x));
|
|
244
|
+
notify("Queued. The result appears below in a minute or two.");
|
|
245
|
+
},
|
|
246
|
+
"The run could not be started."
|
|
247
|
+
);
|
|
248
|
+
const remove = (s) => withBusy(
|
|
249
|
+
s.id,
|
|
250
|
+
async () => {
|
|
251
|
+
await deleteSchedule(s.id);
|
|
252
|
+
setSchedules((prev) => prev.filter((x) => x.id !== s.id));
|
|
253
|
+
setRuns((prev) => prev.filter((r) => r.scheduleId !== s.id));
|
|
254
|
+
setLimits((l) => l ? { ...l, active: l.active - (s.status === "active" ? 1 : 0) } : l);
|
|
255
|
+
if (editingId === s.id) closeForm();
|
|
256
|
+
notify("Schedule deleted.");
|
|
257
|
+
},
|
|
258
|
+
"The schedule could not be deleted."
|
|
259
|
+
);
|
|
260
|
+
const atCap = limits ? limits.active >= limits.max : false;
|
|
261
|
+
const fieldSx = { "& .MuiOutlinedInput-root": { borderRadius: 2 } };
|
|
262
|
+
const formValid = !!form && form.name.trim().length > 0 && form.prompt.trim().length > 0 && (form.preset === "custom" ? Boolean(form.cron?.trim()) : Boolean(form.time)) && (form.preset !== "weekly" || Boolean(form.weekday)) && !previewError;
|
|
263
|
+
return /* @__PURE__ */ jsxs(Stack, { spacing: 3, children: [
|
|
264
|
+
loadError && /* @__PURE__ */ jsx(
|
|
265
|
+
Alert,
|
|
266
|
+
{
|
|
267
|
+
severity: "error",
|
|
268
|
+
action: /* @__PURE__ */ jsx(Button, { color: "inherit", size: "small", onClick: () => void refresh(), children: "Retry" }),
|
|
269
|
+
children: loadError
|
|
270
|
+
}
|
|
271
|
+
),
|
|
272
|
+
/* @__PURE__ */ jsxs(Box, { sx: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: 2, flexWrap: "wrap" }, children: [
|
|
273
|
+
/* @__PURE__ */ jsxs(Box, { children: [
|
|
274
|
+
/* @__PURE__ */ jsx(Typography, { variant: "subtitle1", sx: { fontWeight: 600 }, children: "Your schedules" }),
|
|
275
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", color: "text.secondary", children: limits ? `${limits.active} of ${limits.max} active on the ${limits.plan.replace("_", " ")} plan \xB7 at most one run per ${limits.minIntervalMinutes >= 60 ? `${Math.round(limits.minIntervalMinutes / 60)} hour${limits.minIntervalMinutes >= 120 ? "s" : ""}` : `${limits.minIntervalMinutes} minutes`}` : "Prompts Bandit runs for you, with results in chat and by email." })
|
|
276
|
+
] }),
|
|
277
|
+
/* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 1, children: [
|
|
278
|
+
/* @__PURE__ */ jsx(Tooltip, { title: "Refresh", children: /* @__PURE__ */ jsx(IconButton, { "aria-label": "Refresh schedules", onClick: () => void refresh(), size: "small", children: /* @__PURE__ */ jsx(Refresh, { fontSize: "small" }) }) }),
|
|
279
|
+
/* @__PURE__ */ jsx(
|
|
280
|
+
Button,
|
|
281
|
+
{
|
|
282
|
+
variant: "contained",
|
|
283
|
+
size: "small",
|
|
284
|
+
startIcon: /* @__PURE__ */ jsx(Plus, {}),
|
|
285
|
+
onClick: openNew,
|
|
286
|
+
disabled: loading || !!loadError || atCap && !editingId,
|
|
287
|
+
sx: { textTransform: "none", borderRadius: 999 },
|
|
288
|
+
children: "New schedule"
|
|
289
|
+
}
|
|
290
|
+
)
|
|
291
|
+
] })
|
|
292
|
+
] }),
|
|
293
|
+
atCap && limits && !form && /* @__PURE__ */ jsx(Alert, { severity: "info", children: limits.max === 0 ? "Scheduled tasks are not included in your plan." : `Your plan allows ${limits.max} active schedule${limits.max === 1 ? "" : "s"}. Pause or delete one to add another.` }),
|
|
294
|
+
limits && !limits.emailAvailable && /* @__PURE__ */ jsx(Alert, { severity: "warning", children: "Email delivery is not available for this account right now; results still appear in your chat history." }),
|
|
295
|
+
/* @__PURE__ */ jsx("div", { ref: formRef, children: /* @__PURE__ */ jsx(Collapse, { in: !!form, unmountOnExit: true, children: form && /* @__PURE__ */ jsxs(Paper, { variant: "outlined", sx: { p: 2, borderRadius: 3 }, "data-testid": "schedule-form", children: [
|
|
296
|
+
/* @__PURE__ */ jsx(Typography, { variant: "subtitle2", sx: { mb: 1.5 }, children: editingId ? "Edit schedule" : "New schedule" }),
|
|
297
|
+
/* @__PURE__ */ jsxs(Stack, { spacing: 1.5, children: [
|
|
298
|
+
/* @__PURE__ */ jsx(
|
|
299
|
+
TextField,
|
|
300
|
+
{
|
|
301
|
+
label: "Name",
|
|
302
|
+
size: "small",
|
|
303
|
+
value: form.name,
|
|
304
|
+
onChange: (e) => setForm({ ...form, name: e.target.value }),
|
|
305
|
+
inputProps: { maxLength: 120, "aria-label": "Schedule name" },
|
|
306
|
+
sx: fieldSx
|
|
307
|
+
}
|
|
308
|
+
),
|
|
309
|
+
/* @__PURE__ */ jsx(
|
|
310
|
+
TextField,
|
|
311
|
+
{
|
|
312
|
+
label: "What Bandit should do",
|
|
313
|
+
size: "small",
|
|
314
|
+
multiline: true,
|
|
315
|
+
minRows: 3,
|
|
316
|
+
maxRows: 10,
|
|
317
|
+
value: form.prompt,
|
|
318
|
+
onChange: (e) => setForm({ ...form, prompt: e.target.value }),
|
|
319
|
+
helperText: `Self-contained: the run has no chat context. ${form.prompt.length}/${limits?.maxPromptChars ?? 4e3}`,
|
|
320
|
+
inputProps: { maxLength: limits?.maxPromptChars ?? 4e3, "aria-label": "Prompt to run" },
|
|
321
|
+
sx: fieldSx
|
|
322
|
+
}
|
|
323
|
+
),
|
|
324
|
+
/* @__PURE__ */ jsxs(Box, { sx: { display: "grid", gap: 1.5, gridTemplateColumns: { xs: "1fr", sm: "1fr 1fr 1fr 1fr" } }, children: [
|
|
325
|
+
/* @__PURE__ */ jsx(
|
|
326
|
+
TextField,
|
|
327
|
+
{
|
|
328
|
+
select: true,
|
|
329
|
+
label: "Repeat",
|
|
330
|
+
size: "small",
|
|
331
|
+
value: form.preset,
|
|
332
|
+
onChange: (e) => setForm({ ...form, preset: e.target.value }),
|
|
333
|
+
sx: fieldSx,
|
|
334
|
+
children: PRESETS.map((p) => /* @__PURE__ */ jsx(MenuItem, { value: p.value, children: p.label }, p.value))
|
|
335
|
+
}
|
|
336
|
+
),
|
|
337
|
+
form.preset === "weekly" && /* @__PURE__ */ jsx(
|
|
338
|
+
TextField,
|
|
339
|
+
{
|
|
340
|
+
select: true,
|
|
341
|
+
label: "Day",
|
|
342
|
+
size: "small",
|
|
343
|
+
value: form.weekday ?? "",
|
|
344
|
+
onChange: (e) => setForm({ ...form, weekday: e.target.value }),
|
|
345
|
+
sx: fieldSx,
|
|
346
|
+
children: WEEKDAYS.map((d) => /* @__PURE__ */ jsx(MenuItem, { value: d, children: d.charAt(0).toUpperCase() + d.slice(1) }, d))
|
|
347
|
+
}
|
|
348
|
+
),
|
|
349
|
+
form.preset === "custom" ? /* @__PURE__ */ jsx(
|
|
350
|
+
TextField,
|
|
351
|
+
{
|
|
352
|
+
label: "Cron",
|
|
353
|
+
size: "small",
|
|
354
|
+
value: form.cron ?? "",
|
|
355
|
+
placeholder: "0 8 * * 1-5",
|
|
356
|
+
onChange: (e) => setForm({ ...form, cron: e.target.value }),
|
|
357
|
+
inputProps: { "aria-label": "Cron expression" },
|
|
358
|
+
sx: fieldSx
|
|
359
|
+
}
|
|
360
|
+
) : /* @__PURE__ */ jsx(
|
|
361
|
+
TextField,
|
|
362
|
+
{
|
|
363
|
+
label: "Time",
|
|
364
|
+
type: "time",
|
|
365
|
+
size: "small",
|
|
366
|
+
value: form.time ?? "",
|
|
367
|
+
onChange: (e) => setForm({ ...form, time: e.target.value }),
|
|
368
|
+
inputProps: { step: 300, "aria-label": "Time of day" },
|
|
369
|
+
InputLabelProps: { shrink: true },
|
|
370
|
+
sx: fieldSx
|
|
371
|
+
}
|
|
372
|
+
),
|
|
373
|
+
/* @__PURE__ */ jsx(
|
|
374
|
+
TextField,
|
|
375
|
+
{
|
|
376
|
+
label: "Time zone",
|
|
377
|
+
size: "small",
|
|
378
|
+
value: form.timeZone,
|
|
379
|
+
onChange: (e) => setForm({ ...form, timeZone: e.target.value }),
|
|
380
|
+
inputProps: { "aria-label": "Time zone" },
|
|
381
|
+
sx: fieldSx
|
|
382
|
+
}
|
|
383
|
+
),
|
|
384
|
+
/* @__PURE__ */ jsx(
|
|
385
|
+
TextField,
|
|
386
|
+
{
|
|
387
|
+
select: true,
|
|
388
|
+
label: "Model",
|
|
389
|
+
size: "small",
|
|
390
|
+
value: form.model ?? limits?.defaultModel ?? "",
|
|
391
|
+
onChange: (e) => setForm({ ...form, model: e.target.value }),
|
|
392
|
+
sx: fieldSx,
|
|
393
|
+
children: (limits?.models ?? [form.model ?? ""]).map((m) => /* @__PURE__ */ jsx(MenuItem, { value: m, children: m }, m))
|
|
394
|
+
}
|
|
395
|
+
)
|
|
396
|
+
] }),
|
|
397
|
+
/* @__PURE__ */ jsxs(Box, { sx: { display: "flex", flexWrap: "wrap", gap: 1 }, children: [
|
|
398
|
+
/* @__PURE__ */ jsx(
|
|
399
|
+
FormControlLabel,
|
|
400
|
+
{
|
|
401
|
+
control: /* @__PURE__ */ jsx(
|
|
402
|
+
Switch,
|
|
403
|
+
{
|
|
404
|
+
size: "small",
|
|
405
|
+
checked: form.webSearch !== false,
|
|
406
|
+
onChange: (e) => setForm({ ...form, webSearch: e.target.checked })
|
|
407
|
+
}
|
|
408
|
+
),
|
|
409
|
+
label: /* @__PURE__ */ jsx(Typography, { variant: "body2", children: "Search the web" })
|
|
410
|
+
}
|
|
411
|
+
),
|
|
412
|
+
/* @__PURE__ */ jsx(
|
|
413
|
+
FormControlLabel,
|
|
414
|
+
{
|
|
415
|
+
control: /* @__PURE__ */ jsx(
|
|
416
|
+
Switch,
|
|
417
|
+
{
|
|
418
|
+
size: "small",
|
|
419
|
+
checked: form.deliverEmail !== false,
|
|
420
|
+
disabled: limits ? !limits.emailAvailable : false,
|
|
421
|
+
onChange: (e) => setForm({ ...form, deliverEmail: e.target.checked })
|
|
422
|
+
}
|
|
423
|
+
),
|
|
424
|
+
label: /* @__PURE__ */ jsxs(Typography, { variant: "body2", children: [
|
|
425
|
+
"Email me the result",
|
|
426
|
+
limits?.email ? ` (${limits.email})` : ""
|
|
427
|
+
] })
|
|
428
|
+
}
|
|
429
|
+
)
|
|
430
|
+
] }),
|
|
431
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", color: previewError ? "error" : "text.secondary", role: "status", children: previewError ?? preview ?? describeSchedule(form) }),
|
|
432
|
+
formError && /* @__PURE__ */ jsx(Alert, { severity: "error", children: formError }),
|
|
433
|
+
/* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 1, justifyContent: "flex-end", children: [
|
|
434
|
+
/* @__PURE__ */ jsx(Button, { onClick: closeForm, color: "inherit", size: "small", disabled: saving, sx: { textTransform: "none" }, children: "Cancel" }),
|
|
435
|
+
/* @__PURE__ */ jsx(
|
|
436
|
+
Button,
|
|
437
|
+
{
|
|
438
|
+
onClick: () => void submitForm(),
|
|
439
|
+
variant: "contained",
|
|
440
|
+
size: "small",
|
|
441
|
+
disabled: !formValid || saving,
|
|
442
|
+
startIcon: saving ? /* @__PURE__ */ jsx(CircularProgress, { size: 14, color: "inherit" }) : void 0,
|
|
443
|
+
sx: { textTransform: "none", borderRadius: 999 },
|
|
444
|
+
children: editingId ? "Save changes" : "Create schedule"
|
|
445
|
+
}
|
|
446
|
+
)
|
|
447
|
+
] })
|
|
448
|
+
] })
|
|
449
|
+
] }) }) }),
|
|
450
|
+
loading ? /* @__PURE__ */ jsxs(Stack, { spacing: 1, children: [
|
|
451
|
+
/* @__PURE__ */ jsx(Skeleton, { variant: "rounded", height: 72 }),
|
|
452
|
+
/* @__PURE__ */ jsx(Skeleton, { variant: "rounded", height: 72 })
|
|
453
|
+
] }) : schedules.length === 0 ? !loadError && /* @__PURE__ */ jsx(
|
|
454
|
+
ManagementEmptyState,
|
|
455
|
+
{
|
|
456
|
+
title: "No schedules yet",
|
|
457
|
+
description: 'Ask Bandit in chat ("every weekday at 8, summarise AI news and email me") or create one here.',
|
|
458
|
+
action: /* @__PURE__ */ jsx(Button, { variant: "outlined", size: "small", onClick: openNew, disabled: atCap, sx: { textTransform: "none" }, children: "New schedule" })
|
|
459
|
+
}
|
|
460
|
+
) : /* @__PURE__ */ jsx(Stack, { spacing: 1, "data-testid": "schedule-list", children: schedules.map((s) => {
|
|
461
|
+
const isBusy = Boolean(busy[s.id]);
|
|
462
|
+
return /* @__PURE__ */ jsx(Paper, { variant: "outlined", sx: { p: 1.75, borderRadius: 3 }, children: /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", gap: 1.5, alignItems: "flex-start", flexWrap: "wrap" }, children: [
|
|
463
|
+
/* @__PURE__ */ jsxs(Box, { sx: { flex: 1, minWidth: 220 }, children: [
|
|
464
|
+
/* @__PURE__ */ jsxs(Box, { sx: { display: "flex", alignItems: "center", gap: 1, flexWrap: "wrap" }, children: [
|
|
465
|
+
/* @__PURE__ */ jsx(Typography, { variant: "subtitle2", sx: { fontWeight: 600 }, children: s.name }),
|
|
466
|
+
/* @__PURE__ */ jsx(
|
|
467
|
+
Chip,
|
|
468
|
+
{
|
|
469
|
+
size: "small",
|
|
470
|
+
label: s.status === "active" ? "Active" : s.pausedReason === "failures" ? "Paused after failures" : "Paused",
|
|
471
|
+
color: s.status === "active" ? "success" : s.pausedReason === "failures" ? "warning" : "default",
|
|
472
|
+
variant: "outlined",
|
|
473
|
+
sx: { height: 20, fontSize: "0.7rem" }
|
|
474
|
+
}
|
|
475
|
+
),
|
|
476
|
+
s.runRequested && /* @__PURE__ */ jsx(Chip, { size: "small", label: "Running\u2026", sx: { height: 20, fontSize: "0.7rem" } }),
|
|
477
|
+
s.webSearch && /* @__PURE__ */ jsx(Chip, { size: "small", label: "Web search", variant: "outlined", sx: { height: 20, fontSize: "0.7rem" } }),
|
|
478
|
+
s.deliverEmail && /* @__PURE__ */ jsx(Chip, { size: "small", label: "Email", variant: "outlined", sx: { height: 20, fontSize: "0.7rem" } })
|
|
479
|
+
] }),
|
|
480
|
+
/* @__PURE__ */ jsxs(Typography, { variant: "body2", color: "text.secondary", sx: { mt: 0.25 }, children: [
|
|
481
|
+
s.description,
|
|
482
|
+
s.status === "active" && s.nextRunAt ? ` \xB7 next ${formatInZone(s.nextRunAt, s.timeZone)}` : "",
|
|
483
|
+
s.lastRunAt ? ` \xB7 last run ${statusLabel({ status: s.lastRunStatus ?? "succeeded" }).toLowerCase()} ${formatInZone(s.lastRunAt, s.timeZone)}` : ""
|
|
484
|
+
] }),
|
|
485
|
+
/* @__PURE__ */ jsx(
|
|
486
|
+
Typography,
|
|
487
|
+
{
|
|
488
|
+
variant: "body2",
|
|
489
|
+
sx: {
|
|
490
|
+
mt: 0.5,
|
|
491
|
+
color: "text.primary",
|
|
492
|
+
overflow: "hidden",
|
|
493
|
+
textOverflow: "ellipsis",
|
|
494
|
+
display: "-webkit-box",
|
|
495
|
+
WebkitLineClamp: 2,
|
|
496
|
+
WebkitBoxOrient: "vertical"
|
|
497
|
+
},
|
|
498
|
+
children: s.prompt
|
|
499
|
+
}
|
|
500
|
+
),
|
|
501
|
+
s.lastError && s.lastRunStatus !== "succeeded" && /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "error", children: s.lastError })
|
|
502
|
+
] }),
|
|
503
|
+
/* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 0.5, alignItems: "center", children: [
|
|
504
|
+
/* @__PURE__ */ jsx(Button, { size: "small", onClick: () => void runNow(s), disabled: isBusy || s.runRequested, sx: { textTransform: "none" }, children: "Run now" }),
|
|
505
|
+
/* @__PURE__ */ jsx(Button, { size: "small", onClick: () => void togglePause(s), disabled: isBusy, sx: { textTransform: "none" }, children: s.status === "active" ? "Pause" : "Resume" }),
|
|
506
|
+
/* @__PURE__ */ jsx(Tooltip, { title: "Edit", children: /* @__PURE__ */ jsx(IconButton, { size: "small", "aria-label": `Edit ${s.name}`, onClick: () => openEdit(s), disabled: isBusy, children: /* @__PURE__ */ jsx(Edit, { fontSize: "small" }) }) }),
|
|
507
|
+
/* @__PURE__ */ jsx(Tooltip, { title: "Delete", children: /* @__PURE__ */ jsx(IconButton, { size: "small", "aria-label": `Delete ${s.name}`, onClick: () => void remove(s), disabled: isBusy, children: /* @__PURE__ */ jsx(Trash, { fontSize: "small" }) }) })
|
|
508
|
+
] })
|
|
509
|
+
] }) }, s.id);
|
|
510
|
+
}) }),
|
|
511
|
+
/* @__PURE__ */ jsxs(Box, { children: [
|
|
512
|
+
/* @__PURE__ */ jsx(Typography, { variant: "subtitle1", sx: { fontWeight: 600, mb: 1 }, children: "Recent results" }),
|
|
513
|
+
runs.length === 0 ? /* @__PURE__ */ jsx(Typography, { variant: "body2", color: "text.secondary", children: "Results appear here after the first run, and in your chat history." }) : /* @__PURE__ */ jsx(Stack, { spacing: 1, "data-testid": "schedule-runs", children: runs.map((run) => {
|
|
514
|
+
const schedule = schedules.find((s) => s.id === run.scheduleId);
|
|
515
|
+
const zone = schedule?.timeZone ?? browserTimeZone();
|
|
516
|
+
const expanded = openRun === run.id;
|
|
517
|
+
return /* @__PURE__ */ jsxs(Paper, { variant: "outlined", sx: { p: 1.5, borderRadius: 3 }, children: [
|
|
518
|
+
/* @__PURE__ */ jsxs(Box, { sx: { display: "flex", alignItems: "center", gap: 1, flexWrap: "wrap" }, children: [
|
|
519
|
+
/* @__PURE__ */ jsx(Chip, { size: "small", label: statusLabel(run), color: statusColor(run.status), variant: "outlined", sx: { height: 20, fontSize: "0.7rem" } }),
|
|
520
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", sx: { fontWeight: 600 }, children: run.scheduleName }),
|
|
521
|
+
/* @__PURE__ */ jsxs(Typography, { variant: "body2", color: "text.secondary", children: [
|
|
522
|
+
formatInZone(run.startedAt, zone),
|
|
523
|
+
run.trigger === "manual" ? " \xB7 run now" : "",
|
|
524
|
+
run.searches.length ? ` \xB7 ${run.searches.length} search${run.searches.length === 1 ? "" : "es"}` : "",
|
|
525
|
+
run.emailSent ? " \xB7 emailed" : ""
|
|
526
|
+
] }),
|
|
527
|
+
/* @__PURE__ */ jsx(Box, { sx: { flex: 1 } }),
|
|
528
|
+
run.conversationId && /* @__PURE__ */ jsx(Link, { href: `${chatPath}?conversation=${encodeURIComponent(run.conversationId)}`, variant: "body2", underline: "hover", children: "Open in chat" }),
|
|
529
|
+
(run.result || run.error) && /* @__PURE__ */ jsx(Button, { size: "small", onClick: () => setOpenRun(expanded ? null : run.id), sx: { textTransform: "none" }, children: expanded ? "Hide" : "Show" })
|
|
530
|
+
] }),
|
|
531
|
+
/* @__PURE__ */ jsx(Collapse, { in: expanded, unmountOnExit: true, children: /* @__PURE__ */ jsxs(Box, { sx: { mt: 1.5, pt: 1.5, borderTop: 1, borderColor: "divider" }, children: [
|
|
532
|
+
run.error && /* @__PURE__ */ jsx(Alert, { severity: run.status === "skipped" ? "warning" : "error", sx: { mb: run.result ? 1.5 : 0 }, children: run.error }),
|
|
533
|
+
run.result && /* @__PURE__ */ jsx(StreamingMarkdown_default, { content: run.result })
|
|
534
|
+
] }) })
|
|
535
|
+
] }, run.id);
|
|
536
|
+
}) })
|
|
537
|
+
] })
|
|
538
|
+
] });
|
|
539
|
+
};
|
|
540
|
+
var SchedulesTab_default = SchedulesTab;
|
|
541
|
+
export {
|
|
542
|
+
SchedulesTab_default as default
|
|
543
|
+
};
|
|
544
|
+
//# sourceMappingURL=SchedulesTab-YZG3P2GW.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/management/components/SchedulesTab.tsx"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import {
|
|
2
|
+
chat_default
|
|
3
|
+
} from "./chunk-W2D454CZ.mjs";
|
|
4
|
+
import "./chunk-6CSFKF34.mjs";
|
|
5
|
+
import "./chunk-GX4FVZNA.mjs";
|
|
6
|
+
import "./chunk-62H3OLTV.mjs";
|
|
7
|
+
import "./chunk-PSI7RQ54.mjs";
|
|
8
|
+
import "./chunk-LMAQWR7Z.mjs";
|
|
9
|
+
import "./chunk-4LLCLYLH.mjs";
|
|
10
|
+
import "./chunk-S3DWWUBD.mjs";
|
|
11
|
+
import "./chunk-NI7BKLC7.mjs";
|
|
12
|
+
export {
|
|
13
|
+
chat_default as default
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=chat-W7MDFESE.mjs.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// src/store/packageSettingsStore.ts
|
|
2
|
+
import { create } from "zustand";
|
|
3
|
+
var usePackageSettingsStore = create((set, get) => ({
|
|
4
|
+
settings: null,
|
|
5
|
+
setSettings: (settings) => set({ settings }),
|
|
6
|
+
getSettings: () => get().settings,
|
|
7
|
+
resetSettings: () => set({ settings: null })
|
|
8
|
+
}));
|
|
9
|
+
|
|
10
|
+
export {
|
|
11
|
+
usePackageSettingsStore
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=chunk-4LLCLYLH.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/store/packageSettingsStore.ts"],"mappings":";AAMA,SAAS,cAAc;AAuEhB,IAAM,0BAA0B,OAA6B,CAAC,KAAK,SAAS;AAAA,EACjF,UAAU;AAAA,EACV,aAAa,CAAC,aAAa,IAAI,EAAE,SAAS,CAAC;AAAA,EAC3C,aAAa,MAAM,IAAI,EAAE;AAAA,EACzB,eAAe,MAAM,IAAI,EAAE,UAAU,KAAK,CAAC;AAC7C,EAAE;","names":[]}
|