@burtson-labs/bandit-engine 2.1.8 → 2.1.9

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.
Files changed (62) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/{AdvancedTab-HZTDXFST.mjs → AdvancedTab-D7SDAQEL.mjs} +4 -4
  3. package/dist/CrewSection-N2J3TJGU.mjs +15 -0
  4. package/dist/{PersonalizationTab-2XHFTYYW.mjs → PersonalizationTab-KPTVJKB3.mjs} +6 -6
  5. package/dist/{ProjectsPane-KE5DGFN4.mjs → ProjectsPane-C63C6GW5.mjs} +11 -10
  6. package/dist/ProjectsPane-C63C6GW5.mjs.map +1 -0
  7. package/dist/{SchedulesTab-AM5QP36K.mjs → SchedulesTab-TEOM3NWQ.mjs} +12 -12
  8. package/dist/{chat-D66YM4MB.mjs → chat-QAEEYO73.mjs} +16 -13
  9. package/dist/chunk-3CDCJJ4S.mjs +64 -0
  10. package/dist/chunk-3CDCJJ4S.mjs.map +1 -0
  11. package/dist/{chunk-FBLITVVY.mjs → chunk-5JNKGMMN.mjs} +31 -5
  12. package/dist/chunk-5JNKGMMN.mjs.map +1 -0
  13. package/dist/chunk-F56OTXXR.mjs +17 -0
  14. package/dist/chunk-F56OTXXR.mjs.map +1 -0
  15. package/dist/{chunk-LAH6UL3Q.mjs → chunk-GN3X7IIZ.mjs} +10 -10
  16. package/dist/{chunk-2FI2IICG.mjs → chunk-JGJRY4MR.mjs} +2 -2
  17. package/dist/chunk-MR643IO6.mjs +294 -0
  18. package/dist/chunk-MR643IO6.mjs.map +1 -0
  19. package/dist/{chunk-WZGDQ4EA.mjs → chunk-MX37LD3Z.mjs} +382 -81
  20. package/dist/chunk-MX37LD3Z.mjs.map +1 -0
  21. package/dist/{chunk-2THUYNVU.mjs → chunk-MX7Z4RSP.mjs} +2 -2
  22. package/dist/{chunk-5WCKKD3S.mjs → chunk-P42M52OW.mjs} +18 -28
  23. package/dist/chunk-P42M52OW.mjs.map +1 -0
  24. package/dist/{chunk-5URP2E5V.mjs → chunk-UT46TXNG.mjs} +42 -6
  25. package/dist/chunk-UT46TXNG.mjs.map +1 -0
  26. package/dist/{chunk-2HFSBPOE.mjs → chunk-WDFQG3RM.mjs} +21 -1
  27. package/dist/chunk-WDFQG3RM.mjs.map +1 -0
  28. package/dist/chunk-XWUHUDAV.mjs +814 -0
  29. package/dist/chunk-XWUHUDAV.mjs.map +1 -0
  30. package/dist/{chunk-K4AO466X.mjs → chunk-YY7BX2HM.mjs} +10 -14
  31. package/dist/chunk-YY7BX2HM.mjs.map +1 -0
  32. package/dist/crew-delegate-card-I4SSZU5H.mjs +229 -0
  33. package/dist/crew-delegate-card-I4SSZU5H.mjs.map +1 -0
  34. package/dist/crew-mention-picker-OSJ2NHUB.mjs +118 -0
  35. package/dist/crew-mention-picker-OSJ2NHUB.mjs.map +1 -0
  36. package/dist/crew-task-card-ZCXFTR34.mjs +416 -0
  37. package/dist/crew-task-card-ZCXFTR34.mjs.map +1 -0
  38. package/dist/index.js +7142 -5177
  39. package/dist/index.js.map +1 -1
  40. package/dist/index.mjs +64 -59
  41. package/dist/index.mjs.map +1 -1
  42. package/dist/{schedule-confirm-card-D4K76HEA.mjs → schedule-confirm-card-Y2JF2RBV.mjs} +5 -5
  43. package/package.json +1 -1
  44. package/dist/CrewSection-YM26YD2N.mjs +0 -12
  45. package/dist/ProjectsPane-KE5DGFN4.mjs.map +0 -1
  46. package/dist/chunk-2HFSBPOE.mjs.map +0 -1
  47. package/dist/chunk-5URP2E5V.mjs.map +0 -1
  48. package/dist/chunk-5WCKKD3S.mjs.map +0 -1
  49. package/dist/chunk-EKPPIS3X.mjs +0 -336
  50. package/dist/chunk-EKPPIS3X.mjs.map +0 -1
  51. package/dist/chunk-FBLITVVY.mjs.map +0 -1
  52. package/dist/chunk-K4AO466X.mjs.map +0 -1
  53. package/dist/chunk-WZGDQ4EA.mjs.map +0 -1
  54. /package/dist/{AdvancedTab-HZTDXFST.mjs.map → AdvancedTab-D7SDAQEL.mjs.map} +0 -0
  55. /package/dist/{CrewSection-YM26YD2N.mjs.map → CrewSection-N2J3TJGU.mjs.map} +0 -0
  56. /package/dist/{PersonalizationTab-2XHFTYYW.mjs.map → PersonalizationTab-KPTVJKB3.mjs.map} +0 -0
  57. /package/dist/{SchedulesTab-AM5QP36K.mjs.map → SchedulesTab-TEOM3NWQ.mjs.map} +0 -0
  58. /package/dist/{chat-D66YM4MB.mjs.map → chat-QAEEYO73.mjs.map} +0 -0
  59. /package/dist/{chunk-LAH6UL3Q.mjs.map → chunk-GN3X7IIZ.mjs.map} +0 -0
  60. /package/dist/{chunk-2FI2IICG.mjs.map → chunk-JGJRY4MR.mjs.map} +0 -0
  61. /package/dist/{chunk-2THUYNVU.mjs.map → chunk-MX7Z4RSP.mjs.map} +0 -0
  62. /package/dist/{schedule-confirm-card-D4K76HEA.mjs.map → schedule-confirm-card-Y2JF2RBV.mjs.map} +0 -0
@@ -0,0 +1,294 @@
1
+ import {
2
+ usePackageSettingsStore
3
+ } from "./chunk-K7SQWDNF.mjs";
4
+ import {
5
+ authenticationService
6
+ } from "./chunk-S3DWWUBD.mjs";
7
+
8
+ // src/services/crew/crewService.ts
9
+ var CREW_ACTIVE_STATUSES = [
10
+ "queued",
11
+ "running",
12
+ "awaiting_approval"
13
+ ];
14
+ var isCrewTaskActive = (status) => !!status && CREW_ACTIVE_STATUSES.includes(status);
15
+ var gatewayBase = () => {
16
+ const settings = usePackageSettingsStore.getState().settings;
17
+ const url = settings?.gatewayApiUrl?.replace(/\/$/, "");
18
+ if (!url) throw new Error("Gateway API is not configured.");
19
+ return url;
20
+ };
21
+ var authHeaders = () => {
22
+ const headers = { "Content-Type": "application/json" };
23
+ const token = authenticationService.getToken();
24
+ if (token) headers["Authorization"] = `Bearer ${token}`;
25
+ return headers;
26
+ };
27
+ var parse = async (res) => {
28
+ const text = await res.text();
29
+ const body = text ? JSON.parse(text) : null;
30
+ if (!res.ok) {
31
+ const message = body && typeof body === "object" && (body.error || body.message) || `Request failed (${res.status})`;
32
+ throw new Error(String(message));
33
+ }
34
+ return body;
35
+ };
36
+ var scoped = (path, scope) => `${gatewayBase()}/crew/${path}${scope ? `${path.includes("?") ? "&" : "?"}scope=${encodeURIComponent(scope)}` : ""}`;
37
+ var listBandits = async (scope) => parse(await fetch(scoped("bandits", scope), { headers: authHeaders() }));
38
+ var createBandit = async (input, scope) => parse(
39
+ await fetch(scoped("bandits", scope), {
40
+ method: "POST",
41
+ headers: authHeaders(),
42
+ body: JSON.stringify(input)
43
+ })
44
+ );
45
+ var deleteBandit = async (id, scope) => {
46
+ const res = await fetch(scoped(`bandits/${encodeURIComponent(id)}`, scope), {
47
+ method: "DELETE",
48
+ headers: authHeaders()
49
+ });
50
+ if (!res.ok && res.status !== 204) {
51
+ throw new Error(`Could not remove the Bandit (${res.status}).`);
52
+ }
53
+ };
54
+ var listCrewTasks = async (scope, limit = 8, filters = {}) => {
55
+ const query = new URLSearchParams({ limit: String(limit) });
56
+ if (filters.status) query.set("status", filters.status);
57
+ if (filters.banditId) query.set("banditId", filters.banditId);
58
+ return parse(
59
+ await fetch(scoped(`tasks?${query.toString()}`, scope), { headers: authHeaders() })
60
+ );
61
+ };
62
+ var getCrewTask = async (id) => parse(
63
+ await fetch(scoped(`tasks/${encodeURIComponent(id)}`), { headers: authHeaders() })
64
+ );
65
+ var runCrewTask = async (input, scope) => parse(
66
+ await fetch(scoped("tasks", scope), {
67
+ method: "POST",
68
+ headers: authHeaders(),
69
+ body: JSON.stringify({
70
+ banditId: input.banditId,
71
+ banditName: input.banditName,
72
+ prompt: input.prompt,
73
+ context: input.context,
74
+ origin: input.origin ?? "web"
75
+ })
76
+ })
77
+ );
78
+ var decideCrewApproval = async (taskId, approvalId, approve) => parse(
79
+ await fetch(
80
+ scoped(
81
+ `tasks/${encodeURIComponent(taskId)}/approvals/${encodeURIComponent(approvalId)}`
82
+ ),
83
+ {
84
+ method: "POST",
85
+ headers: authHeaders(),
86
+ body: JSON.stringify({ approve })
87
+ }
88
+ )
89
+ );
90
+ var cancelCrewTask = async (taskId) => {
91
+ const res = await fetch(scoped(`tasks/${encodeURIComponent(taskId)}/cancel`), {
92
+ method: "POST",
93
+ headers: authHeaders()
94
+ });
95
+ if (!res.ok) await parse(res);
96
+ };
97
+ var createSseParser = () => {
98
+ let buffer = "";
99
+ return (chunk) => {
100
+ buffer += chunk.replace(/\r\n?/g, "\n");
101
+ const events = [];
102
+ let boundary = buffer.indexOf("\n\n");
103
+ while (boundary !== -1) {
104
+ const block = buffer.slice(0, boundary);
105
+ buffer = buffer.slice(boundary + 2);
106
+ let event = "message";
107
+ let id;
108
+ const data = [];
109
+ for (const line of block.split("\n")) {
110
+ if (!line || line.startsWith(":")) continue;
111
+ const colon = line.indexOf(":");
112
+ const field = colon === -1 ? line : line.slice(0, colon);
113
+ const value = colon === -1 ? "" : line.slice(colon + 1).replace(/^ /, "");
114
+ if (field === "event") event = value;
115
+ else if (field === "data") data.push(value);
116
+ else if (field === "id") id = value;
117
+ }
118
+ if (data.length > 0) events.push({ event, data: data.join("\n"), id });
119
+ boundary = buffer.indexOf("\n\n");
120
+ }
121
+ return events;
122
+ };
123
+ };
124
+ var streamCrewTask = (taskId, handlers, options = {}) => {
125
+ const fetchImpl = options.fetchImpl ?? fetch;
126
+ const pollMs = options.pollMs ?? 2500;
127
+ const controller = new AbortController();
128
+ let stopped = false;
129
+ let pollTimer;
130
+ let lastStatus;
131
+ const finish = (info) => {
132
+ if (stopped) return;
133
+ stopped = true;
134
+ handlers.onEnd?.(info);
135
+ };
136
+ const poll = async () => {
137
+ if (stopped) return;
138
+ try {
139
+ const task = await getCrewTask(taskId);
140
+ if (stopped) return;
141
+ lastStatus = task.status;
142
+ handlers.onTask(task);
143
+ if (!isCrewTaskActive(task.status)) {
144
+ finish({ id: task.id, status: task.status, error: task.error });
145
+ return;
146
+ }
147
+ } catch (error) {
148
+ if (stopped) return;
149
+ handlers.onError?.(error instanceof Error ? error : new Error(String(error)));
150
+ }
151
+ pollTimer = setTimeout(() => void poll(), pollMs);
152
+ };
153
+ const fallBackToPolling = () => {
154
+ if (stopped || pollTimer) return;
155
+ pollTimer = setTimeout(() => void poll(), 0);
156
+ };
157
+ const run = async () => {
158
+ let response;
159
+ try {
160
+ response = await fetchImpl(scoped(`tasks/${encodeURIComponent(taskId)}/events`), {
161
+ headers: { ...authHeaders(), Accept: "text/event-stream" },
162
+ signal: controller.signal
163
+ });
164
+ } catch (error) {
165
+ if (stopped) return;
166
+ handlers.onError?.(error instanceof Error ? error : new Error(String(error)));
167
+ fallBackToPolling();
168
+ return;
169
+ }
170
+ if (stopped) return;
171
+ if (!response.ok || !response.body) {
172
+ if (response.status === 404 || response.status === 401 || response.status === 403) {
173
+ handlers.onError?.(new Error(`This task is not available (${response.status}).`));
174
+ stopped = true;
175
+ return;
176
+ }
177
+ fallBackToPolling();
178
+ return;
179
+ }
180
+ const reader = response.body.getReader();
181
+ const decoder = new TextDecoder();
182
+ const parse2 = createSseParser();
183
+ try {
184
+ for (; ; ) {
185
+ const { value, done } = await reader.read();
186
+ if (stopped) return;
187
+ if (done) break;
188
+ for (const evt of parse2(decoder.decode(value, { stream: true }))) {
189
+ if (evt.event === "task") {
190
+ try {
191
+ const task = JSON.parse(evt.data);
192
+ lastStatus = task.status;
193
+ handlers.onTask(task);
194
+ } catch {
195
+ }
196
+ } else if (evt.event === "end") {
197
+ try {
198
+ finish(JSON.parse(evt.data));
199
+ } catch {
200
+ finish({ id: taskId, status: lastStatus ?? "unknown" });
201
+ }
202
+ return;
203
+ }
204
+ }
205
+ }
206
+ } catch (error) {
207
+ if (stopped) return;
208
+ handlers.onError?.(error instanceof Error ? error : new Error(String(error)));
209
+ }
210
+ if (!stopped && (lastStatus === void 0 || isCrewTaskActive(lastStatus)))
211
+ fallBackToPolling();
212
+ };
213
+ void run();
214
+ return () => {
215
+ stopped = true;
216
+ controller.abort();
217
+ if (pollTimer) clearTimeout(pollTimer);
218
+ };
219
+ };
220
+ var crewStatusLabel = (status) => {
221
+ switch (status) {
222
+ case "queued":
223
+ return "Queued";
224
+ case "running":
225
+ return "Working";
226
+ case "awaiting_approval":
227
+ return "Needs your approval";
228
+ case "completed":
229
+ return "Done";
230
+ case "failed":
231
+ return "Failed";
232
+ case "cancelled":
233
+ return "Stopped";
234
+ case "expired":
235
+ return "Timed out";
236
+ default:
237
+ return status;
238
+ }
239
+ };
240
+ var workspacesUrl = (path = "") => `${gatewayBase()}/chat-workspaces${path}`;
241
+ var listChatWorkspaces = async () => parse(await fetch(workspacesUrl(), { headers: authHeaders() }));
242
+ var startSlackInstall = async (returnTo) => parse(
243
+ await fetch(workspacesUrl("/slack/install"), {
244
+ method: "POST",
245
+ headers: authHeaders(),
246
+ body: JSON.stringify({ returnTo })
247
+ })
248
+ );
249
+ var claimSlackWorkspace = async (id) => parse(
250
+ await fetch(workspacesUrl(`/slack/${encodeURIComponent(id)}/org`), {
251
+ method: "POST",
252
+ headers: authHeaders(),
253
+ body: "{}"
254
+ })
255
+ );
256
+ var disconnectSlackWorkspace = async (id) => parse(
257
+ await fetch(workspacesUrl(`/slack/${encodeURIComponent(id)}/org`), {
258
+ method: "DELETE",
259
+ headers: authHeaders()
260
+ })
261
+ );
262
+ var claimTeamsTenant = async (tenantId) => parse(
263
+ await fetch(workspacesUrl(`/teams/${encodeURIComponent(tenantId)}/org`), {
264
+ method: "POST",
265
+ headers: authHeaders(),
266
+ body: "{}"
267
+ })
268
+ );
269
+ var disconnectTeamsTenant = async (tenantId) => parse(
270
+ await fetch(workspacesUrl(`/teams/${encodeURIComponent(tenantId)}/org`), {
271
+ method: "DELETE",
272
+ headers: authHeaders()
273
+ })
274
+ );
275
+
276
+ export {
277
+ isCrewTaskActive,
278
+ listBandits,
279
+ createBandit,
280
+ deleteBandit,
281
+ listCrewTasks,
282
+ runCrewTask,
283
+ decideCrewApproval,
284
+ cancelCrewTask,
285
+ streamCrewTask,
286
+ crewStatusLabel,
287
+ listChatWorkspaces,
288
+ startSlackInstall,
289
+ claimSlackWorkspace,
290
+ disconnectSlackWorkspace,
291
+ claimTeamsTenant,
292
+ disconnectTeamsTenant
293
+ };
294
+ //# sourceMappingURL=chunk-MR643IO6.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/services/crew/crewService.ts"],"mappings":"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","names":["parse"]}