@elevasis/ui 1.7.5 → 1.8.0

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 (43) hide show
  1. package/dist/api/index.js +2 -3
  2. package/dist/auth/index.js +3 -4
  3. package/dist/charts/index.js +6 -8
  4. package/dist/{chunk-SFF5MJEI.js → chunk-2YBPRE6H.js} +1 -2
  5. package/dist/{chunk-U34YGJQB.js → chunk-3I2LOKQU.js} +1 -1
  6. package/dist/{chunk-PVVQTENF.js → chunk-3PURTICE.js} +1 -1
  7. package/dist/{chunk-2JBWPFHF.js → chunk-6TMW6VQ2.js} +1 -1
  8. package/dist/{chunk-6HZAMY6T.js → chunk-ARZM3OTI.js} +6 -2
  9. package/dist/{chunk-OK3XFSJJ.js → chunk-BWZMI4KP.js} +963 -10
  10. package/dist/{chunk-4KPI7YCY.js → chunk-EHXOR5LA.js} +2 -3
  11. package/dist/{chunk-Y7UY3HI4.js → chunk-ESOQEOOX.js} +2 -2
  12. package/dist/{chunk-L2CM2CUA.js → chunk-GZVH423C.js} +26 -3
  13. package/dist/{chunk-Y6DNK5ZD.js → chunk-JRJW2H57.js} +35 -9
  14. package/dist/{chunk-LBPALY25.js → chunk-JUPCUF77.js} +2 -2
  15. package/dist/chunk-QWYJHM3S.js +1068 -0
  16. package/dist/{chunk-NEK6JKPW.js → chunk-WUQWCUCB.js} +1 -1
  17. package/dist/chunk-Z4TPHMRD.js +231 -0
  18. package/dist/components/index.css +65 -0
  19. package/dist/components/index.d.ts +261 -2
  20. package/dist/components/index.js +1136 -80
  21. package/dist/hooks/index.css +452 -0
  22. package/dist/hooks/index.d.ts +1831 -13
  23. package/dist/hooks/index.js +15 -6
  24. package/dist/hooks/published.css +452 -0
  25. package/dist/hooks/published.d.ts +866 -6
  26. package/dist/hooks/published.js +15 -370
  27. package/dist/index.css +3 -0
  28. package/dist/index.d.ts +1665 -2
  29. package/dist/index.js +14 -17
  30. package/dist/initialization/index.js +3 -4
  31. package/dist/organization/index.js +3 -4
  32. package/dist/profile/index.js +1 -2
  33. package/dist/provider/index.css +3 -0
  34. package/dist/provider/index.js +7 -10
  35. package/dist/provider/published.js +6 -9
  36. package/dist/utils/index.d.ts +92 -1
  37. package/dist/utils/index.js +1 -2
  38. package/package.json +7 -3
  39. package/dist/chunk-4VGWQ5AN.js +0 -91
  40. package/dist/chunk-KA7LO7U5.js +0 -28
  41. package/dist/chunk-LFYO3MDC.js +0 -58
  42. package/dist/chunk-TIRMFDM4.js +0 -33
  43. package/dist/chunk-TYV5NJV2.js +0 -1
@@ -1,372 +1,17 @@
1
- import { OperationsService, SessionIdParamSchema, ExecutionIdParamsSchema, WebSocketSessionTurnSchema } from '../chunk-OK3XFSJJ.js';
2
- export { OperationsService, createUseFeatureAccess, executionsKeys, scheduleKeys, sortData, useActivities, useActivityTrend, useBatchDelete, useBatchedResourcesHealth, useBulkDeleteExecutions, useBusinessImpact, useCancelExecution, useCancelSchedule, useCommandQueue, useCommandQueueTotals, useCostBreakdown, useCostByModel, useCostSummary, useCostTrends, useCreateSchedule, useDashboardMetrics, useDeleteExecution, useDeleteSchedule, useDeleteTask, useErrorAnalysis, useErrorDetail, useErrorDetails, useErrorDistribution, useErrorNotification, useExecuteAsync, useExecution, useExecutionHealth, useExecutionLogs, useExecutions, useGetExecutionHistory, useGetSchedule, useListSchedules, useMarkAllAsRead, useMarkAsRead, useNotificationCount, useNotifications, usePaginationState, usePatchTask, usePauseSchedule, useResolveAllErrors, useResolveError, useResolveErrorsByExecution, useResourceDefinition, useResources, useResourcesHealth, useResumeSchedule, useRetryExecution, useSSEConnection, useSortedData, useSubmitAction, useSuccessNotification, useTableSelection, useTableSort, useTopFailingResources, useUnresolveError, useUpdateAnchor, useUpdateSchedule, useWarningNotification } from '../chunk-OK3XFSJJ.js';
3
- export { observabilityKeys, useErrorTrends } from '../chunk-6HZAMY6T.js';
1
+ export { OperationsService, createUseFeatureAccess, executionsKeys, isSessionCapable, operationsKeys, scheduleKeys, sessionsKeys, sortData, useActivities, useActivityTrend, useArchiveSession, useBatchDelete, useBatchedResourcesHealth, useBulkDeleteExecutions, useBusinessImpact, useCancelExecution, useCancelSchedule, useCheckpointTasks, useCommandQueue, useCommandQueueTotals, useCommandViewData, useCommandViewLayout, useCommandViewStats, useCommandViewStore, useCostBreakdown, useCostByModel, useCostSummary, useCostTrends, useCreateSchedule, useCreateSession, useDashboardMetrics, useDeleteExecution, useDeleteSchedule, useDeleteSession, useDeleteTask, useDeploymentDocs, useErrorAnalysis, useErrorDetail, useErrorDetails, useErrorDistribution, useErrorNotification, useExecuteAsync, useExecution, useExecutionHealth, useExecutionLogSSE, useExecutionLogs, useExecutionPanelState, useExecutions, useGetExecutionHistory, useGetSchedule, useGraphStats, useListSchedules, useMarkAllAsRead, useMarkAsRead, useNotificationCount, useNotifications, usePaginationState, usePatchTask, usePauseSchedule, useRecentExecutionsByResource, useResolveAllErrors, useResolveError, useResolveErrorsByExecution, useResourceDefinition, useResourceErrors, useResourceExecutions, useResources, useResourcesHealth, useResumeSchedule, useRetryExecution, useSSEConnection, useScheduledTasks, useSession, useSessionExecution, useSessionExecutions, useSessionMessages, useSessionWebSocket, useSessions, useSortedData, useSubmitAction, useSuccessNotification, useTableSelection, useTableSort, useTestNotification, useTopFailingResources, useUnresolveError, useUnresolvedErrors, useUpdateAnchor, useUpdateSchedule, useWarningNotification } from '../chunk-BWZMI4KP.js';
2
+ export { observabilityKeys, useErrorTrends } from '../chunk-ARZM3OTI.js';
4
3
  import '../chunk-JGJSZ3UE.js';
5
- import '../chunk-TIRMFDM4.js';
6
- import '../chunk-4VGWQ5AN.js';
4
+ import '../chunk-F6RBK7NJ.js';
5
+ import '../chunk-3I2LOKQU.js';
6
+ import '../chunk-RNP5R5I3.js';
7
+ import '../chunk-ESOQEOOX.js';
8
+ import '../chunk-KB5NKPTN.js';
9
+ import '../chunk-JRJW2H57.js';
10
+ import '../chunk-2YBPRE6H.js';
11
+ import '../chunk-JUPCUF77.js';
12
+ export { REFETCH_INTERVAL_RUNNING, WS_MAX_RETRIES_BEFORE_ERROR, WS_RECONNECT_BASE_DELAY, WS_RECONNECT_MAX_DELAY } from '../chunk-Z4TPHMRD.js';
7
13
  import '../chunk-FWZJH3TL.js';
8
- import { useElevasisServices } from '../chunk-KA7LO7U5.js';
9
- import { useOrganization } from '../chunk-DD3CCMCZ.js';
10
- import { useAuthContext } from '../chunk-7PLEQFHO.js';
11
- import { useQuery, useQueryClient, useMutation } from '@tanstack/react-query';
12
- import { useState, useRef, useCallback, useEffect } from 'react';
13
-
14
- // src/hooks/sessions/queryKeys.ts
15
- var sessionsKeys = {
16
- all: ["sessions"],
17
- sessions: (org, params) => [...sessionsKeys.all, "list", org, params],
18
- session: (org, sessionId) => [...sessionsKeys.all, "detail", org, sessionId],
19
- executions: (org, sessionId) => [...sessionsKeys.all, org, sessionId, "executions"],
20
- execution: (org, sessionId, executionId) => [...sessionsKeys.all, org, sessionId, "executions", executionId],
21
- messages: (org, sessionId) => [...sessionsKeys.all, org, sessionId, "messages"]
22
- };
23
-
24
- // src/hooks/sessions/constants.ts
25
- var REFETCH_INTERVAL_RUNNING = 2e3;
26
- var WS_RECONNECT_BASE_DELAY = 1e3;
27
- var WS_RECONNECT_MAX_DELAY = 3e4;
28
- var WS_MAX_RETRIES_BEFORE_ERROR = 3;
29
- function useSessions(params, options) {
30
- const { apiRequest, isReady } = useElevasisServices();
31
- const { currentMembership } = useOrganization();
32
- const organizationName = currentMembership?.organization?.name;
33
- return useQuery({
34
- queryKey: sessionsKeys.sessions(organizationName || "", params),
35
- queryFn: async () => {
36
- const service = new OperationsService(apiRequest);
37
- return service.listSessions(params);
38
- },
39
- enabled: isReady && (options?.enabled ?? true)
40
- });
41
- }
42
- function useSession(sessionId) {
43
- const { apiRequest, isReady } = useElevasisServices();
44
- const { currentMembership } = useOrganization();
45
- const organizationName = currentMembership?.organization?.name;
46
- return useQuery({
47
- queryKey: sessionsKeys.session(organizationName || "", sessionId),
48
- queryFn: () => {
49
- const service = new OperationsService(apiRequest);
50
- return service.getSession(sessionId);
51
- },
52
- enabled: isReady && !!sessionId
53
- });
54
- }
55
- function useCreateSession() {
56
- const { apiRequest } = useElevasisServices();
57
- const { currentMembership } = useOrganization();
58
- const organizationName = currentMembership?.organization?.name;
59
- const queryClient = useQueryClient();
60
- return useMutation({
61
- mutationFn: async (resourceId) => {
62
- const service = new OperationsService(apiRequest);
63
- return service.createSession(resourceId);
64
- },
65
- onSuccess: () => {
66
- queryClient.invalidateQueries({ queryKey: sessionsKeys.sessions(organizationName || "") });
67
- }
68
- });
69
- }
70
- function useDeleteSession() {
71
- const { apiRequest } = useElevasisServices();
72
- const { currentMembership } = useOrganization();
73
- const organizationName = currentMembership?.organization?.name;
74
- const queryClient = useQueryClient();
75
- return useMutation({
76
- mutationFn: async (sessionId) => {
77
- SessionIdParamSchema.parse({ sessionId });
78
- await apiRequest(`/sessions/${sessionId}`, {
79
- method: "DELETE"
80
- });
81
- },
82
- onSuccess: (_, sessionId) => {
83
- queryClient.removeQueries({
84
- queryKey: sessionsKeys.session(organizationName || "", sessionId)
85
- });
86
- queryClient.invalidateQueries({
87
- queryKey: sessionsKeys.sessions(organizationName || "")
88
- });
89
- }
90
- });
91
- }
92
- function useArchiveSession() {
93
- const { apiRequest } = useElevasisServices();
94
- const { currentMembership } = useOrganization();
95
- const organizationName = currentMembership?.organization?.name;
96
- const queryClient = useQueryClient();
97
- return useMutation({
98
- mutationFn: (sessionId) => {
99
- const service = new OperationsService(apiRequest);
100
- return service.archiveSession(sessionId);
101
- },
102
- onSuccess: () => {
103
- queryClient.invalidateQueries({ queryKey: sessionsKeys.sessions(organizationName || "") });
104
- }
105
- });
106
- }
107
- function useSessionExecutions(sessionId) {
108
- const { apiRequest, isReady } = useElevasisServices();
109
- const { currentSupabaseOrganizationId } = useOrganization();
110
- return useQuery({
111
- queryKey: sessionsKeys.executions(currentSupabaseOrganizationId || "", sessionId),
112
- queryFn: async () => {
113
- SessionIdParamSchema.parse({ sessionId });
114
- return apiRequest(`/sessions/${sessionId}/executions`, {
115
- method: "GET"
116
- });
117
- },
118
- enabled: isReady && !!sessionId,
119
- staleTime: 0
120
- });
121
- }
122
- function useSessionExecution(sessionId, executionId) {
123
- const { apiRequest, isReady } = useElevasisServices();
124
- const { currentSupabaseOrganizationId } = useOrganization();
125
- return useQuery({
126
- queryKey: sessionsKeys.execution(currentSupabaseOrganizationId || "", sessionId, executionId),
127
- queryFn: async () => {
128
- ExecutionIdParamsSchema.parse({ sessionId, executionId });
129
- return apiRequest(`/sessions/${sessionId}/executions/${executionId}`, {
130
- method: "GET"
131
- });
132
- },
133
- enabled: isReady && !!sessionId && !!executionId,
134
- refetchInterval: (query) => {
135
- const data = query.state.data;
136
- const shouldRefetch = data?.status === "running";
137
- return shouldRefetch ? REFETCH_INTERVAL_RUNNING : false;
138
- }
139
- });
140
- }
141
- function useSessionMessages(sessionId) {
142
- const { apiRequest, isReady } = useElevasisServices();
143
- const { currentSupabaseOrganizationId } = useOrganization();
144
- return useQuery({
145
- queryKey: sessionsKeys.messages(currentSupabaseOrganizationId || "", sessionId),
146
- queryFn: async () => {
147
- SessionIdParamSchema.parse({ sessionId });
148
- const response = await apiRequest(`/sessions/${sessionId}/messages`, {
149
- method: "GET"
150
- });
151
- const messages = response.messages.map((msg) => ({
152
- ...msg,
153
- createdAt: new Date(msg.createdAt)
154
- }));
155
- return messages;
156
- },
157
- enabled: isReady && !!sessionId,
158
- staleTime: 0
159
- });
160
- }
161
- function formatMessageEvent(event) {
162
- switch (event.type) {
163
- case "user_message":
164
- return event.text;
165
- case "assistant_message":
166
- return event.text;
167
- case "agent:started":
168
- return "\u{1F916} Agent started reasoning";
169
- case "agent:reasoning":
170
- return `\u{1F4AD} Reasoning (Iteration ${event.iteration})`;
171
- case "agent:tool_call":
172
- return `\u{1F527} Tool: ${event.toolName}`;
173
- case "agent:tool_result":
174
- return event.success ? "\u2705 Tool Result" : "\u26A0\uFE0F Tool Result (Failed)";
175
- case "agent:completed":
176
- return "\u2705 Agent completed";
177
- case "agent:error":
178
- return `\u274C Agent error: ${event.error}`;
179
- }
180
- }
181
- function getWsUrl(apiUrl) {
182
- const url = new URL(apiUrl);
183
- const protocol = url.protocol === "https:" ? "wss:" : "ws:";
184
- return `${protocol}//${url.host}`;
185
- }
186
- function useSessionWebSocket(sessionId, apiUrl) {
187
- const [messages, setMessages] = useState([]);
188
- const [state, setState] = useState({
189
- isConnected: false,
190
- isProcessing: false,
191
- error: null
192
- });
193
- const [lastTokenUsage, setLastTokenUsage] = useState(null);
194
- const wsRef = useRef(null);
195
- const retryCountRef = useRef(0);
196
- const reconnectTimeoutRef = useRef(null);
197
- const { getAccessToken } = useAuthContext();
198
- const { currentWorkOSOrganizationId, currentSupabaseOrganizationId } = useOrganization();
199
- const queryClient = useQueryClient();
200
- const getAccessTokenRef = useRef(getAccessToken);
201
- getAccessTokenRef.current = getAccessToken;
202
- const currentWorkOSOrgIdRef = useRef(currentWorkOSOrganizationId);
203
- currentWorkOSOrgIdRef.current = currentWorkOSOrganizationId;
204
- const queryClientRef = useRef(queryClient);
205
- queryClientRef.current = queryClient;
206
- const currentSupabaseOrgIdRef = useRef(currentSupabaseOrganizationId);
207
- currentSupabaseOrgIdRef.current = currentSupabaseOrganizationId;
208
- const connect = useCallback(async () => {
209
- if (!currentWorkOSOrgIdRef.current) {
210
- return;
211
- }
212
- if (wsRef.current?.readyState === WebSocket.OPEN || wsRef.current?.readyState === WebSocket.CONNECTING) {
213
- return;
214
- }
215
- const token = await getAccessTokenRef.current();
216
- if (!token) {
217
- return;
218
- }
219
- const orgId = currentWorkOSOrgIdRef.current;
220
- const wsUrl = `${getWsUrl(apiUrl)}/ws/sessions/${sessionId}?token=${token}&orgId=${orgId}`;
221
- const ws = new WebSocket(wsUrl);
222
- ws.onopen = () => {
223
- setState((prev) => ({ ...prev, isConnected: true, error: null }));
224
- retryCountRef.current = 0;
225
- const supabaseOrgId = currentSupabaseOrgIdRef.current;
226
- if (supabaseOrgId) {
227
- queryClientRef.current.invalidateQueries({
228
- queryKey: sessionsKeys.messages(supabaseOrgId, sessionId)
229
- });
230
- }
231
- };
232
- ws.onmessage = (event) => {
233
- try {
234
- const data = JSON.parse(event.data);
235
- if (data.type && data.type !== "turn:complete" && data.type !== "error") {
236
- const tempMessage = {
237
- id: `temp-${Date.now()}`,
238
- role: data.type === "user_message" ? "user" : "assistant",
239
- messageType: data.type,
240
- text: formatMessageEvent(data),
241
- // Format based on type
242
- metadata: data.type.startsWith("agent:") ? data : void 0,
243
- turnNumber: 999999,
244
- // High placeholder so temp messages sort to bottom
245
- messageIndex: Date.now(),
246
- // Use timestamp for unique ordering
247
- createdAt: /* @__PURE__ */ new Date()
248
- };
249
- setMessages((prev) => [...prev, tempMessage]);
250
- } else if (data.type === "turn:complete") {
251
- if (data.tokenUsage) {
252
- setLastTokenUsage(data.tokenUsage);
253
- }
254
- setState((prev) => ({ ...prev, isProcessing: false }));
255
- const supabaseOrgId = currentSupabaseOrgIdRef.current;
256
- if (supabaseOrgId) {
257
- queryClientRef.current.invalidateQueries({
258
- queryKey: sessionsKeys.messages(supabaseOrgId, sessionId)
259
- });
260
- queryClientRef.current.invalidateQueries({
261
- queryKey: sessionsKeys.executions(supabaseOrgId, sessionId)
262
- });
263
- queryClientRef.current.invalidateQueries({
264
- queryKey: sessionsKeys.session(supabaseOrgId, sessionId)
265
- });
266
- }
267
- } else if (data.type === "error") {
268
- setState((prev) => ({
269
- ...prev,
270
- error: data.error,
271
- isProcessing: false
272
- }));
273
- }
274
- } catch (error) {
275
- console.error("Failed to parse WebSocket message:", error);
276
- }
277
- };
278
- ws.onerror = () => {
279
- };
280
- ws.onclose = (event) => {
281
- setState((prev) => ({ ...prev, isConnected: false }));
282
- if (!event.wasClean && retryCountRef.current >= WS_MAX_RETRIES_BEFORE_ERROR) {
283
- setState((prev) => ({
284
- ...prev,
285
- error: "Unable to connect to session. Retrying..."
286
- }));
287
- }
288
- const terminalCodes = [1003, 1008];
289
- if (terminalCodes.includes(event.code) || event.code >= 4e3) {
290
- setState((prev) => ({
291
- ...prev,
292
- error: `Connection rejected (code ${event.code})`
293
- }));
294
- return;
295
- }
296
- const delay = Math.min(WS_RECONNECT_BASE_DELAY * Math.pow(2, retryCountRef.current), WS_RECONNECT_MAX_DELAY);
297
- retryCountRef.current += 1;
298
- reconnectTimeoutRef.current = setTimeout(() => {
299
- connect();
300
- }, delay);
301
- };
302
- wsRef.current = ws;
303
- }, [sessionId, apiUrl]);
304
- useEffect(() => {
305
- retryCountRef.current = 0;
306
- if (currentWorkOSOrgIdRef.current) {
307
- connect();
308
- }
309
- return () => {
310
- if (reconnectTimeoutRef.current) {
311
- clearTimeout(reconnectTimeoutRef.current);
312
- }
313
- if (wsRef.current) {
314
- wsRef.current.close();
315
- wsRef.current = null;
316
- }
317
- };
318
- }, [sessionId, currentWorkOSOrganizationId, connect]);
319
- const sendMessage = useCallback(
320
- (text, pageContext) => {
321
- const trimmed = text.trim();
322
- if (!trimmed) {
323
- return;
324
- }
325
- if (!wsRef.current || state.isProcessing) {
326
- return;
327
- }
328
- if (wsRef.current.readyState !== WebSocket.OPEN) {
329
- setState((prev) => ({
330
- ...prev,
331
- error: "WebSocket not connected"
332
- }));
333
- return;
334
- }
335
- const userMessage = {
336
- id: `temp-${Date.now()}`,
337
- role: "user",
338
- messageType: "user_message",
339
- text: trimmed,
340
- turnNumber: 999999,
341
- // High placeholder so temp messages sort to bottom
342
- messageIndex: Date.now(),
343
- // Use timestamp for unique ordering
344
- createdAt: /* @__PURE__ */ new Date()
345
- };
346
- setMessages((prev) => [...prev, userMessage]);
347
- const input = { message: trimmed };
348
- if (pageContext) {
349
- input.pageContext = pageContext;
350
- }
351
- const message = WebSocketSessionTurnSchema.parse({
352
- type: "session:turn",
353
- input
354
- });
355
- wsRef.current.send(JSON.stringify(message));
356
- setState((prev) => ({ ...prev, isProcessing: true, error: null }));
357
- },
358
- [state.isProcessing, sessionId]
359
- );
360
- const clearError = useCallback(() => {
361
- setState((prev) => ({ ...prev, error: null }));
362
- }, []);
363
- return {
364
- messages,
365
- state,
366
- sendMessage,
367
- clearError,
368
- lastTokenUsage
369
- };
370
- }
371
-
372
- export { REFETCH_INTERVAL_RUNNING, WS_MAX_RETRIES_BEFORE_ERROR, WS_RECONNECT_BASE_DELAY, WS_RECONNECT_MAX_DELAY, sessionsKeys, useArchiveSession, useCreateSession, useDeleteSession, useSession, useSessionExecution, useSessionExecutions, useSessionMessages, useSessionWebSocket, useSessions };
14
+ import '../chunk-WUQWCUCB.js';
15
+ import '../chunk-GZVH423C.js';
16
+ import '../chunk-DD3CCMCZ.js';
17
+ import '../chunk-7PLEQFHO.js';
package/dist/index.css CHANGED
@@ -396,6 +396,9 @@
396
396
  .mantine-Select-option:hover {
397
397
  background-color: var(--color-surface-hover) !important;
398
398
  }
399
+ [data-mantine-color-scheme=dark] .mantine-Tabs-root {
400
+ --tab-border-color: var(--color-border);
401
+ }
399
402
  .mantine-Tabs-tab:hover {
400
403
  background-color: var(--color-surface-hover);
401
404
  }