@workflow/web-shared 4.0.1-beta.9 → 4.1.0-beta.46

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 (137) hide show
  1. package/README.md +2 -0
  2. package/dist/api/workflow-api-client.d.ts +325 -85
  3. package/dist/api/workflow-api-client.d.ts.map +1 -1
  4. package/dist/api/workflow-api-client.js +370 -214
  5. package/dist/api/workflow-api-client.js.map +1 -1
  6. package/dist/api/workflow-server-actions.d.ts +136 -3
  7. package/dist/api/workflow-server-actions.d.ts.map +1 -1
  8. package/dist/api/workflow-server-actions.js +649 -116
  9. package/dist/api/workflow-server-actions.js.map +1 -1
  10. package/dist/components/ui/card.d.ts +9 -0
  11. package/dist/components/ui/card.d.ts.map +1 -0
  12. package/dist/components/ui/card.js +18 -0
  13. package/dist/components/ui/card.js.map +1 -0
  14. package/dist/components/ui/error-card.d.ts +15 -0
  15. package/dist/components/ui/error-card.d.ts.map +1 -0
  16. package/dist/components/ui/error-card.js +14 -0
  17. package/dist/components/ui/error-card.js.map +1 -0
  18. package/dist/components/ui/skeleton.d.ts +3 -0
  19. package/dist/components/ui/skeleton.d.ts.map +1 -0
  20. package/dist/components/ui/skeleton.js +7 -0
  21. package/dist/components/ui/skeleton.js.map +1 -0
  22. package/dist/error-boundary.d.ts +28 -0
  23. package/dist/error-boundary.d.ts.map +1 -0
  24. package/dist/error-boundary.js +51 -0
  25. package/dist/error-boundary.js.map +1 -0
  26. package/dist/event-list-view.d.ts +13 -0
  27. package/dist/event-list-view.d.ts.map +1 -0
  28. package/dist/event-list-view.js +183 -0
  29. package/dist/event-list-view.js.map +1 -0
  30. package/dist/hook-actions.d.ts +59 -0
  31. package/dist/hook-actions.d.ts.map +1 -0
  32. package/dist/hook-actions.js +76 -0
  33. package/dist/hook-actions.js.map +1 -0
  34. package/dist/hooks/use-dark-mode.d.ts +9 -0
  35. package/dist/hooks/use-dark-mode.d.ts.map +1 -0
  36. package/dist/hooks/use-dark-mode.js +30 -0
  37. package/dist/hooks/use-dark-mode.js.map +1 -0
  38. package/dist/index.d.ts +14 -1
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +9 -1
  41. package/dist/index.js.map +1 -1
  42. package/dist/lib/event-analysis.d.ts +55 -0
  43. package/dist/lib/event-analysis.d.ts.map +1 -0
  44. package/dist/lib/event-analysis.js +161 -0
  45. package/dist/lib/event-analysis.js.map +1 -0
  46. package/dist/lib/utils.d.ts +44 -0
  47. package/dist/lib/utils.d.ts.map +1 -1
  48. package/dist/lib/utils.js +109 -0
  49. package/dist/lib/utils.js.map +1 -1
  50. package/dist/run-trace-view.d.ts.map +1 -1
  51. package/dist/run-trace-view.js +1 -1
  52. package/dist/run-trace-view.js.map +1 -1
  53. package/dist/sidebar/attribute-panel.d.ts +12 -2
  54. package/dist/sidebar/attribute-panel.d.ts.map +1 -1
  55. package/dist/sidebar/attribute-panel.js +368 -23
  56. package/dist/sidebar/attribute-panel.js.map +1 -1
  57. package/dist/sidebar/conversation-view.d.ts +7 -0
  58. package/dist/sidebar/conversation-view.d.ts.map +1 -0
  59. package/dist/sidebar/conversation-view.js +125 -0
  60. package/dist/sidebar/conversation-view.js.map +1 -0
  61. package/dist/sidebar/detail-card.d.ts.map +1 -1
  62. package/dist/sidebar/detail-card.js +2 -2
  63. package/dist/sidebar/detail-card.js.map +1 -1
  64. package/dist/sidebar/entity-detail-panel.d.ts +12 -0
  65. package/dist/sidebar/entity-detail-panel.d.ts.map +1 -0
  66. package/dist/sidebar/entity-detail-panel.js +190 -0
  67. package/dist/sidebar/entity-detail-panel.js.map +1 -0
  68. package/dist/sidebar/events-list.d.ts +2 -1
  69. package/dist/sidebar/events-list.d.ts.map +1 -1
  70. package/dist/sidebar/events-list.js +11 -10
  71. package/dist/sidebar/events-list.js.map +1 -1
  72. package/dist/sidebar/resolve-hook-modal.d.ts +16 -0
  73. package/dist/sidebar/resolve-hook-modal.d.ts.map +1 -0
  74. package/dist/sidebar/resolve-hook-modal.js +74 -0
  75. package/dist/sidebar/resolve-hook-modal.js.map +1 -0
  76. package/dist/stream-viewer.d.ts +13 -0
  77. package/dist/stream-viewer.d.ts.map +1 -0
  78. package/dist/stream-viewer.js +109 -0
  79. package/dist/stream-viewer.js.map +1 -0
  80. package/dist/trace-viewer/components/markers.d.ts.map +1 -1
  81. package/dist/trace-viewer/components/markers.js +3 -2
  82. package/dist/trace-viewer/components/markers.js.map +1 -1
  83. package/dist/trace-viewer/components/node.d.ts.map +1 -1
  84. package/dist/trace-viewer/components/node.js +1 -0
  85. package/dist/trace-viewer/components/node.js.map +1 -1
  86. package/dist/trace-viewer/components/search.d.ts.map +1 -1
  87. package/dist/trace-viewer/components/search.js +1 -0
  88. package/dist/trace-viewer/components/search.js.map +1 -1
  89. package/dist/trace-viewer/components/span-detail-panel.js +2 -2
  90. package/dist/trace-viewer/components/span-detail-panel.js.map +1 -1
  91. package/dist/trace-viewer/context.d.ts.map +1 -1
  92. package/dist/trace-viewer/context.js +1 -0
  93. package/dist/trace-viewer/context.js.map +1 -1
  94. package/dist/trace-viewer/trace-viewer.module.css +47 -30
  95. package/dist/trace-viewer/types.d.ts +11 -0
  96. package/dist/trace-viewer/types.d.ts.map +1 -1
  97. package/dist/trace-viewer/util/timing.d.ts +7 -1
  98. package/dist/trace-viewer/util/timing.d.ts.map +1 -1
  99. package/dist/trace-viewer/util/timing.js +7 -12
  100. package/dist/trace-viewer/util/timing.js.map +1 -1
  101. package/dist/trace-viewer/util/tree.d.ts.map +1 -1
  102. package/dist/trace-viewer/util/tree.js +4 -0
  103. package/dist/trace-viewer/util/tree.js.map +1 -1
  104. package/dist/trace-viewer/util/use-immediate-style.d.ts.map +1 -1
  105. package/dist/trace-viewer/util/use-immediate-style.js +1 -0
  106. package/dist/trace-viewer/util/use-immediate-style.js.map +1 -1
  107. package/dist/trace-viewer/util/use-streaming-spans.d.ts.map +1 -1
  108. package/dist/trace-viewer/util/use-streaming-spans.js +2 -1
  109. package/dist/trace-viewer/util/use-streaming-spans.js.map +1 -1
  110. package/dist/trace-viewer/util/use-trackpad-zoom.d.ts.map +1 -1
  111. package/dist/trace-viewer/util/use-trackpad-zoom.js +1 -0
  112. package/dist/trace-viewer/util/use-trackpad-zoom.js.map +1 -1
  113. package/dist/trace-viewer/worker.js +1 -1
  114. package/dist/trace-viewer/worker.js.map +1 -1
  115. package/dist/workflow-trace-view.d.ts +3 -1
  116. package/dist/workflow-trace-view.d.ts.map +1 -1
  117. package/dist/workflow-trace-view.js +28 -11
  118. package/dist/workflow-trace-view.js.map +1 -1
  119. package/dist/workflow-traces/event-colors.d.ts +1 -1
  120. package/dist/workflow-traces/event-colors.js +2 -2
  121. package/dist/workflow-traces/event-colors.js.map +1 -1
  122. package/dist/workflow-traces/trace-colors.d.ts.map +1 -1
  123. package/dist/workflow-traces/trace-colors.js +1 -3
  124. package/dist/workflow-traces/trace-colors.js.map +1 -1
  125. package/dist/workflow-traces/trace-span-construction.d.ts +18 -3
  126. package/dist/workflow-traces/trace-span-construction.d.ts.map +1 -1
  127. package/dist/workflow-traces/trace-span-construction.js +84 -31
  128. package/dist/workflow-traces/trace-span-construction.js.map +1 -1
  129. package/dist/workflow-traces/trace-time-utils.d.ts +2 -2
  130. package/dist/workflow-traces/trace-time-utils.d.ts.map +1 -1
  131. package/dist/workflow-traces/trace-time-utils.js +9 -0
  132. package/dist/workflow-traces/trace-time-utils.js.map +1 -1
  133. package/package.json +24 -14
  134. package/dist/sidebar/workflow-detail-panel.d.ts +0 -8
  135. package/dist/sidebar/workflow-detail-panel.d.ts.map +0 -1
  136. package/dist/sidebar/workflow-detail-panel.js +0 -56
  137. package/dist/sidebar/workflow-detail-panel.js.map +0 -1
@@ -0,0 +1,76 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Send } from 'lucide-react';
4
+ import { useCallback, useState } from 'react';
5
+ import { toast } from 'sonner';
6
+ import { resumeHook } from './api/workflow-api-client';
7
+ import { ResolveHookModal } from './sidebar/resolve-hook-modal';
8
+ // ============================================================================
9
+ // Hook for managing hook actions state
10
+ // ============================================================================
11
+ /**
12
+ * React hook for managing hook action state.
13
+ * Use this to coordinate the resolve modal across components.
14
+ */
15
+ export function useHookActions({ env, callbacks, }) {
16
+ const [isResolving, setIsResolving] = useState(false);
17
+ const [selectedHook, setSelectedHook] = useState(null);
18
+ const openResolveModal = useCallback((hook) => {
19
+ setSelectedHook(hook);
20
+ }, []);
21
+ const closeResolveModal = useCallback(() => {
22
+ setSelectedHook(null);
23
+ }, []);
24
+ const handleResolve = useCallback(async (payload) => {
25
+ if (isResolving || !selectedHook)
26
+ return;
27
+ try {
28
+ setIsResolving(true);
29
+ await resumeHook(env, selectedHook.token, payload);
30
+ toast.success('Hook resolved', {
31
+ description: 'The payload has been sent and the hook resolved.',
32
+ });
33
+ setSelectedHook(null);
34
+ callbacks?.onSuccess?.();
35
+ }
36
+ catch (err) {
37
+ console.error('Failed to resolve hook:', err);
38
+ toast.error('Failed to resolve hook', {
39
+ description: err instanceof Error ? err.message : 'An unknown error occurred',
40
+ });
41
+ }
42
+ finally {
43
+ setIsResolving(false);
44
+ }
45
+ }, [env, selectedHook, isResolving, callbacks]);
46
+ return {
47
+ isResolving,
48
+ selectedHook,
49
+ openResolveModal,
50
+ closeResolveModal,
51
+ handleResolve,
52
+ };
53
+ }
54
+ /**
55
+ * Dropdown menu item for resolving a hook.
56
+ * This is a single menu item component that can be composed into dropdown menus.
57
+ */
58
+ export function ResolveHookDropdownItem({ hook, stopPropagation = false, onResolveClick, DropdownMenuItem, }) {
59
+ const handleClick = (e) => {
60
+ if (stopPropagation)
61
+ e.stopPropagation();
62
+ onResolveClick(hook);
63
+ };
64
+ return (_jsxs(DropdownMenuItem, { onClick: handleClick, children: [_jsx(Send, { className: "h-4 w-4 mr-2" }), "Resolve Hook"] }));
65
+ }
66
+ /**
67
+ * Convenience wrapper that renders the ResolveHookModal using useHookActions state.
68
+ * Place this at the top level of your component (outside any iteration).
69
+ */
70
+ export function HookResolveModalWrapper({ hookActions, }) {
71
+ const { selectedHook, closeResolveModal, handleResolve, isResolving } = hookActions;
72
+ return (_jsx(ResolveHookModal, { isOpen: selectedHook !== null, onClose: closeResolveModal, onSubmit: handleResolve, isSubmitting: isResolving }));
73
+ }
74
+ // Re-export the modal for direct use
75
+ export { ResolveHookModal } from './sidebar/resolve-hook-modal';
76
+ //# sourceMappingURL=hook-actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-actions.js","sourceRoot":"","sources":["../src/hook-actions.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Hook that detects if dark mode is active and reacts to theme changes.
3
+ * Observes the 'dark' class on the document element, which is how
4
+ * next-themes and similar libraries apply the theme.
5
+ *
6
+ * @returns `true` if dark mode is active, `false` otherwise
7
+ */
8
+ export declare const useDarkMode: () => boolean;
9
+ //# sourceMappingURL=use-dark-mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-dark-mode.d.ts","sourceRoot":"","sources":["../../src/hooks/use-dark-mode.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,QAAO,OAsB9B,CAAC"}
@@ -0,0 +1,30 @@
1
+ 'use client';
2
+ import { useEffect, useState } from 'react';
3
+ /**
4
+ * Hook that detects if dark mode is active and reacts to theme changes.
5
+ * Observes the 'dark' class on the document element, which is how
6
+ * next-themes and similar libraries apply the theme.
7
+ *
8
+ * @returns `true` if dark mode is active, `false` otherwise
9
+ */
10
+ export const useDarkMode = () => {
11
+ const [isDark, setIsDark] = useState(() => {
12
+ if (typeof document === 'undefined')
13
+ return false;
14
+ return document.documentElement.classList.contains('dark');
15
+ });
16
+ useEffect(() => {
17
+ if (typeof document === 'undefined')
18
+ return;
19
+ const observer = new MutationObserver(() => {
20
+ setIsDark(document.documentElement.classList.contains('dark'));
21
+ });
22
+ observer.observe(document.documentElement, {
23
+ attributes: true,
24
+ attributeFilter: ['class'],
25
+ });
26
+ return () => observer.disconnect();
27
+ }, []);
28
+ return isDark;
29
+ };
30
+ //# sourceMappingURL=use-dark-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-dark-mode.js","sourceRoot":"","sources":["../../src/hooks/use-dark-mode.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAY,EAAE;IACvC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE;QACxC,IAAI,OAAO,QAAQ,KAAK,WAAW;YAAE,OAAO,KAAK,CAAC;QAClD,OAAO,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,QAAQ,KAAK,WAAW;YAAE,OAAO;QAE5C,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,GAAG,EAAE;YACzC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,EAAE;YACzC,UAAU,EAAE,IAAI;YAChB,eAAe,EAAE,CAAC,OAAO,CAAC;SAC3B,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,20 @@
1
- export { parseStepName, parseWorkflowName, } from '@workflow/core/parse-name';
1
+ export { parseStepName, parseWorkflowName, } from '@workflow/utils/parse-name';
2
2
  export type { Event, Hook, Step, WorkflowRun } from '@workflow/world';
3
3
  export * from './api/workflow-api-client';
4
+ export type { EnvMap, HealthCheckResultWithLatency, PublicServerConfig, } from './api/workflow-server-actions';
5
+ export { runHealthCheck } from './api/workflow-server-actions';
6
+ export type { HealthCheckEndpoint, HealthCheckResult, } from '@workflow/core/runtime';
7
+ export { ErrorBoundary } from './error-boundary';
8
+ export { EventListView } from './event-list-view';
9
+ export type { HookActionCallbacks, HookActionsDropdownItemProps, HookResolveModalProps, UseHookActionsOptions, UseHookActionsReturn, } from './hook-actions';
10
+ export { HookResolveModalWrapper, ResolveHookDropdownItem, ResolveHookModal, useHookActions, } from './hook-actions';
11
+ export type { EventAnalysis } from './lib/event-analysis';
12
+ export { analyzeEvents, hasPendingHooksFromEvents, hasPendingStepsFromEvents, isTerminalStatus, shouldShowReenqueueButton, } from './lib/event-analysis';
13
+ export type { StreamStep } from './lib/utils';
14
+ export { extractConversation, formatDuration, identifyStreamSteps, isDoStreamStep, } from './lib/utils';
4
15
  export { RunTraceView } from './run-trace-view';
16
+ export { ConversationView } from './sidebar/conversation-view';
17
+ export { StreamViewer } from './stream-viewer';
5
18
  export type { Span, SpanEvent } from './trace-viewer/types';
6
19
  export { WorkflowTraceViewer } from './workflow-trace-view';
7
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACtE,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEtE,cAAc,2BAA2B,CAAC;AAC1C,YAAY,EACV,MAAM,EACN,4BAA4B,EAC5B,kBAAkB,GACnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,YAAY,EACV,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,YAAY,EACV,mBAAmB,EACnB,4BAA4B,EAC5B,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,gBAAgB,EAChB,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACL,aAAa,EACb,yBAAyB,EACzB,yBAAyB,EACzB,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,13 @@
1
- export { parseStepName, parseWorkflowName, } from '@workflow/core/parse-name';
1
+ export { parseStepName, parseWorkflowName, } from '@workflow/utils/parse-name';
2
2
  export * from './api/workflow-api-client';
3
+ export { runHealthCheck } from './api/workflow-server-actions';
4
+ export { ErrorBoundary } from './error-boundary';
5
+ export { EventListView } from './event-list-view';
6
+ export { HookResolveModalWrapper, ResolveHookDropdownItem, ResolveHookModal, useHookActions, } from './hook-actions';
7
+ export { analyzeEvents, hasPendingHooksFromEvents, hasPendingStepsFromEvents, isTerminalStatus, shouldShowReenqueueButton, } from './lib/event-analysis';
8
+ export { extractConversation, formatDuration, identifyStreamSteps, isDoStreamStep, } from './lib/utils';
3
9
  export { RunTraceView } from './run-trace-view';
10
+ export { ConversationView } from './sidebar/conversation-view';
11
+ export { StreamViewer } from './stream-viewer';
4
12
  export { WorkflowTraceViewer } from './workflow-trace-view';
5
13
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AAGnC,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AAGpC,cAAc,2BAA2B,CAAC;AAM1C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAK/D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAQlD,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,gBAAgB,EAChB,cAAc,GACf,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,aAAa,EACb,yBAAyB,EACzB,yBAAyB,EACzB,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Shared utilities for analyzing workflow events.
3
+ * Used by run-actions and trace viewer components.
4
+ */
5
+ import type { Event, WorkflowRunStatus } from '@workflow/world';
6
+ /**
7
+ * Result of analyzing events for a workflow run
8
+ */
9
+ export interface EventAnalysis {
10
+ /** Whether there are pending sleep/wait calls */
11
+ hasPendingSleeps: boolean;
12
+ /** Whether there are pending steps (started but not completed/failed) */
13
+ hasPendingSteps: boolean;
14
+ /** Whether there are pending hooks (created but not disposed) */
15
+ hasPendingHooks: boolean;
16
+ /** Correlation IDs of pending sleeps */
17
+ pendingSleepIds: string[];
18
+ /** Correlation IDs of pending steps */
19
+ pendingStepIds: string[];
20
+ /** Correlation IDs of pending hooks */
21
+ pendingHookIds: string[];
22
+ /** Timestamp of the last step_started or step_retrying event */
23
+ lastStepActivityAt: Date | null;
24
+ /** Timestamp of the last step completion (step_completed or step_failed) */
25
+ lastStepCompletionAt: Date | null;
26
+ }
27
+ /**
28
+ * Analyze events to determine pending sleeps, steps, and hooks.
29
+ */
30
+ export declare function analyzeEvents(events: Event[] | undefined): EventAnalysis;
31
+ /**
32
+ * Check if a workflow run status is terminal (completed, failed, or cancelled)
33
+ */
34
+ export declare function isTerminalStatus(status: WorkflowRunStatus | undefined): boolean;
35
+ /**
36
+ * Determine if the Re-enqueue button should be shown without the debug flag.
37
+ *
38
+ * The Re-enqueue button is shown when the workflow appears to be stuck:
39
+ * - The workflow is not in a terminal state
40
+ * - There are no pending sleeps (which would show the Wake up button instead)
41
+ * - There are no pending hooks (which are waiting for external input)
42
+ * - Either:
43
+ * - The last step_started or step_retrying event was >30 minutes ago, OR
44
+ * - There have been no pending steps for >5 minutes (all steps completed/failed)
45
+ */
46
+ export declare function shouldShowReenqueueButton(events: Event[] | undefined, status: WorkflowRunStatus | undefined): boolean;
47
+ /**
48
+ * Check if there are pending steps from an events list.
49
+ */
50
+ export declare function hasPendingStepsFromEvents(events: Event[] | undefined): boolean;
51
+ /**
52
+ * Check if there are pending hooks from an events list.
53
+ */
54
+ export declare function hasPendingHooksFromEvents(events: Event[] | undefined): boolean;
55
+ //# sourceMappingURL=event-analysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-analysis.d.ts","sourceRoot":"","sources":["../../src/lib/event-analysis.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAMhE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,yEAAyE;IACzE,eAAe,EAAE,OAAO,CAAC;IACzB,iEAAiE;IACjE,eAAe,EAAE,OAAO,CAAC;IACzB,wCAAwC;IACxC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,uCAAuC;IACvC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,uCAAuC;IACvC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gEAAgE;IAChE,kBAAkB,EAAE,IAAI,GAAG,IAAI,CAAC;IAChC,4EAA4E;IAC5E,oBAAoB,EAAE,IAAI,GAAG,IAAI,CAAC;CACnC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,GAAG,aAAa,CAkGxE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,iBAAiB,GAAG,SAAS,GACpC,OAAO,CAIT;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,EAC3B,MAAM,EAAE,iBAAiB,GAAG,SAAS,GACpC,OAAO,CAmDT;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,GAC1B,OAAO,CAET;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,GAC1B,OAAO,CAET"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Shared utilities for analyzing workflow events.
3
+ * Used by run-actions and trace viewer components.
4
+ */
5
+ // Time thresholds for Re-enqueue button visibility
6
+ const STEP_ACTIVITY_TIMEOUT_MS = 30 * 60 * 1000; // 30 minutes
7
+ const STEP_IDLE_TIMEOUT_MS = 5 * 60 * 1000; // 5 minutes
8
+ /**
9
+ * Analyze events to determine pending sleeps, steps, and hooks.
10
+ */
11
+ export function analyzeEvents(events) {
12
+ if (!events || events.length === 0) {
13
+ return {
14
+ hasPendingSleeps: false,
15
+ hasPendingSteps: false,
16
+ hasPendingHooks: false,
17
+ pendingSleepIds: [],
18
+ pendingStepIds: [],
19
+ pendingHookIds: [],
20
+ lastStepActivityAt: null,
21
+ lastStepCompletionAt: null,
22
+ };
23
+ }
24
+ // Group events by correlation ID for each type
25
+ const waitCreated = new Map();
26
+ const waitCompleted = new Set();
27
+ const stepStarted = new Map();
28
+ const stepCompleted = new Set();
29
+ const hookCreated = new Map();
30
+ const hookDisposed = new Set();
31
+ let lastStepActivityAt = null;
32
+ let lastStepCompletionAt = null;
33
+ for (const event of events) {
34
+ const correlationId = event.correlationId;
35
+ if (!correlationId)
36
+ continue;
37
+ switch (event.eventType) {
38
+ // Sleeps/Waits
39
+ case 'wait_created':
40
+ waitCreated.set(correlationId, event);
41
+ break;
42
+ case 'wait_completed':
43
+ waitCompleted.add(correlationId);
44
+ break;
45
+ // Steps
46
+ case 'step_started':
47
+ stepStarted.set(correlationId, event);
48
+ if (!lastStepActivityAt ||
49
+ new Date(event.createdAt) > lastStepActivityAt) {
50
+ lastStepActivityAt = new Date(event.createdAt);
51
+ }
52
+ break;
53
+ case 'step_retrying':
54
+ if (!lastStepActivityAt ||
55
+ new Date(event.createdAt) > lastStepActivityAt) {
56
+ lastStepActivityAt = new Date(event.createdAt);
57
+ }
58
+ break;
59
+ case 'step_completed':
60
+ case 'step_failed':
61
+ stepCompleted.add(correlationId);
62
+ if (!lastStepCompletionAt ||
63
+ new Date(event.createdAt) > lastStepCompletionAt) {
64
+ lastStepCompletionAt = new Date(event.createdAt);
65
+ }
66
+ break;
67
+ // Hooks
68
+ case 'hook_created':
69
+ hookCreated.set(correlationId, event);
70
+ break;
71
+ case 'hook_disposed':
72
+ hookDisposed.add(correlationId);
73
+ break;
74
+ }
75
+ }
76
+ // Find pending items (created but not completed)
77
+ const pendingSleepIds = Array.from(waitCreated.keys()).filter((id) => !waitCompleted.has(id));
78
+ const pendingStepIds = Array.from(stepStarted.keys()).filter((id) => !stepCompleted.has(id));
79
+ const pendingHookIds = Array.from(hookCreated.keys()).filter((id) => !hookDisposed.has(id));
80
+ return {
81
+ hasPendingSleeps: pendingSleepIds.length > 0,
82
+ hasPendingSteps: pendingStepIds.length > 0,
83
+ hasPendingHooks: pendingHookIds.length > 0,
84
+ pendingSleepIds,
85
+ pendingStepIds,
86
+ pendingHookIds,
87
+ lastStepActivityAt,
88
+ lastStepCompletionAt,
89
+ };
90
+ }
91
+ /**
92
+ * Check if a workflow run status is terminal (completed, failed, or cancelled)
93
+ */
94
+ export function isTerminalStatus(status) {
95
+ return (status === 'completed' || status === 'failed' || status === 'cancelled');
96
+ }
97
+ /**
98
+ * Determine if the Re-enqueue button should be shown without the debug flag.
99
+ *
100
+ * The Re-enqueue button is shown when the workflow appears to be stuck:
101
+ * - The workflow is not in a terminal state
102
+ * - There are no pending sleeps (which would show the Wake up button instead)
103
+ * - There are no pending hooks (which are waiting for external input)
104
+ * - Either:
105
+ * - The last step_started or step_retrying event was >30 minutes ago, OR
106
+ * - There have been no pending steps for >5 minutes (all steps completed/failed)
107
+ */
108
+ export function shouldShowReenqueueButton(events, status) {
109
+ // Never show if in terminal state
110
+ if (isTerminalStatus(status)) {
111
+ return false;
112
+ }
113
+ const analysis = analyzeEvents(events);
114
+ // Don't show if there are pending sleeps (Wake up button handles this)
115
+ if (analysis.hasPendingSleeps) {
116
+ return false;
117
+ }
118
+ // Don't show if there are pending hooks (waiting for external input)
119
+ if (analysis.hasPendingHooks) {
120
+ return false;
121
+ }
122
+ const now = Date.now();
123
+ // Check if last step activity was >30 minutes ago
124
+ if (analysis.lastStepActivityAt) {
125
+ const timeSinceLastActivity = now - analysis.lastStepActivityAt.getTime();
126
+ if (timeSinceLastActivity > STEP_ACTIVITY_TIMEOUT_MS) {
127
+ return true;
128
+ }
129
+ }
130
+ // Check if there are no pending steps and last completion was >5 minutes ago
131
+ if (!analysis.hasPendingSteps && analysis.lastStepCompletionAt) {
132
+ const timeSinceLastCompletion = now - analysis.lastStepCompletionAt.getTime();
133
+ if (timeSinceLastCompletion > STEP_IDLE_TIMEOUT_MS) {
134
+ return true;
135
+ }
136
+ }
137
+ // If there's no step activity at all but the run is not terminal,
138
+ // and we've been waiting for a while, show the button
139
+ if (!analysis.lastStepActivityAt &&
140
+ !analysis.hasPendingSteps &&
141
+ !analysis.hasPendingSleeps &&
142
+ !analysis.hasPendingHooks) {
143
+ // This case handles runs that haven't started any steps yet
144
+ // but aren't in a terminal state - they might be stuck
145
+ return true;
146
+ }
147
+ return false;
148
+ }
149
+ /**
150
+ * Check if there are pending steps from an events list.
151
+ */
152
+ export function hasPendingStepsFromEvents(events) {
153
+ return analyzeEvents(events).hasPendingSteps;
154
+ }
155
+ /**
156
+ * Check if there are pending hooks from an events list.
157
+ */
158
+ export function hasPendingHooksFromEvents(events) {
159
+ return analyzeEvents(events).hasPendingHooks;
160
+ }
161
+ //# sourceMappingURL=event-analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-analysis.js","sourceRoot":"","sources":["../../src/lib/event-analysis.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,26 @@
1
+ import type { Step } from '@workflow/world';
2
+ import type { ModelMessage } from 'ai';
1
3
  import { type ClassValue } from 'clsx';
2
4
  export declare function cn(...inputs: ClassValue[]): string;
5
+ /**
6
+ * Formats a duration in milliseconds to a human-readable string.
7
+ *
8
+ * @param ms - Duration in milliseconds
9
+ * @param compact - If true, returns a single-unit format (e.g., "45s", "2.5m").
10
+ * If false (default), returns multi-part format (e.g., "1h 30m", "2d 5h").
11
+ *
12
+ * Compact format:
13
+ * - < 1s: shows milliseconds (e.g., "500ms")
14
+ * - < 1m: shows seconds (e.g., "45s")
15
+ * - < 1h: shows minutes (e.g., "45m")
16
+ * - >= 1h: shows hours (e.g., "2.5h")
17
+ *
18
+ * Full format:
19
+ * - < 1s: shows milliseconds (e.g., "500ms")
20
+ * - < 1m: shows seconds (e.g., "45.5s")
21
+ * - >= 1m: shows human-readable format (e.g., "1h 30m", "2d 5h")
22
+ */
23
+ export declare function formatDuration(ms: number, compact?: boolean): string;
3
24
  /**
4
25
  * Returns a formatted pagination display string
5
26
  * @param currentPage - The current page number
@@ -8,4 +29,27 @@ export declare function cn(...inputs: ClassValue[]): string;
8
29
  * @returns Formatted string like "Page 1 of 3+" or "Page 2 of 2"
9
30
  */
10
31
  export declare function getPaginationDisplay(currentPage: number, totalPages: number, hasMore: boolean): string;
32
+ /**
33
+ * Check if a step is a doStreamStep (LLM call with conversation input)
34
+ */
35
+ export declare function isDoStreamStep(stepName: string): boolean;
36
+ /**
37
+ * Extract the conversation from a hydrated doStreamStep input.
38
+ * doStreamStep signature: (conversationPrompt, model, writable, tools, options)
39
+ * So input[0] is the conversation.
40
+ */
41
+ export declare function extractConversation(stepInput: unknown): ModelMessage[] | null;
42
+ /**
43
+ * A doStreamStep with its conversation input extracted
44
+ */
45
+ export interface StreamStep {
46
+ stepId: string;
47
+ stepName: string;
48
+ displayName: string;
49
+ conversation: ModelMessage[];
50
+ }
51
+ /**
52
+ * Identifies all stream steps (doStreamStep) in a run and extracts their conversations.
53
+ */
54
+ export declare function identifyStreamSteps(steps: Step[]): StreamStep[];
11
55
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,MAAM,CAAC;AAG7C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,GACf,MAAM,CAKR"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AACvC,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,MAAM,CAAC;AAG7C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC;AAWD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,MAAM,CA6ClE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,GACf,MAAM,CAKR;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,OAAO,GAAG,YAAY,EAAE,GAAG,IAAI,CAmB7E;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,YAAY,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,CAc/D"}
package/dist/lib/utils.js CHANGED
@@ -3,6 +3,70 @@ import { twMerge } from 'tailwind-merge';
3
3
  export function cn(...inputs) {
4
4
  return twMerge(clsx(inputs));
5
5
  }
6
+ const durationFormatter = new Intl.NumberFormat(undefined, {
7
+ maximumFractionDigits: 2,
8
+ });
9
+ const MS_IN_SECOND = 1000;
10
+ const MS_IN_MINUTE = 60 * MS_IN_SECOND;
11
+ const MS_IN_HOUR = 60 * MS_IN_MINUTE;
12
+ const MS_IN_DAY = 24 * MS_IN_HOUR;
13
+ /**
14
+ * Formats a duration in milliseconds to a human-readable string.
15
+ *
16
+ * @param ms - Duration in milliseconds
17
+ * @param compact - If true, returns a single-unit format (e.g., "45s", "2.5m").
18
+ * If false (default), returns multi-part format (e.g., "1h 30m", "2d 5h").
19
+ *
20
+ * Compact format:
21
+ * - < 1s: shows milliseconds (e.g., "500ms")
22
+ * - < 1m: shows seconds (e.g., "45s")
23
+ * - < 1h: shows minutes (e.g., "45m")
24
+ * - >= 1h: shows hours (e.g., "2.5h")
25
+ *
26
+ * Full format:
27
+ * - < 1s: shows milliseconds (e.g., "500ms")
28
+ * - < 1m: shows seconds (e.g., "45.5s")
29
+ * - >= 1m: shows human-readable format (e.g., "1h 30m", "2d 5h")
30
+ */
31
+ export function formatDuration(ms, compact = false) {
32
+ if (ms === 0) {
33
+ return '0';
34
+ }
35
+ // For durations less than 1 second, show milliseconds
36
+ if (ms < MS_IN_SECOND) {
37
+ return `${durationFormatter.format(ms)}ms`;
38
+ }
39
+ // For durations less than 1 minute, show seconds
40
+ if (ms < MS_IN_MINUTE) {
41
+ return `${durationFormatter.format(ms / MS_IN_SECOND)}s`;
42
+ }
43
+ // Compact format: single unit
44
+ if (compact) {
45
+ if (ms < MS_IN_HOUR) {
46
+ return `${durationFormatter.format(ms / MS_IN_MINUTE)}m`;
47
+ }
48
+ return `${durationFormatter.format(ms / MS_IN_HOUR)}h`;
49
+ }
50
+ // Full format: human-readable multi-part
51
+ const days = Math.floor(ms / MS_IN_DAY);
52
+ const hours = Math.floor((ms % MS_IN_DAY) / MS_IN_HOUR);
53
+ const minutes = Math.floor((ms % MS_IN_HOUR) / MS_IN_MINUTE);
54
+ const seconds = Math.floor((ms % MS_IN_MINUTE) / MS_IN_SECOND);
55
+ const parts = [];
56
+ if (days > 0) {
57
+ parts.push(`${days}d`);
58
+ }
59
+ if (hours > 0) {
60
+ parts.push(`${hours}h`);
61
+ }
62
+ if (minutes > 0) {
63
+ parts.push(`${minutes}m`);
64
+ }
65
+ if (hours <= 1 && (seconds > 0 || parts.length === 0)) {
66
+ parts.push(`${seconds}s`);
67
+ }
68
+ return parts.join(' ');
69
+ }
6
70
  /**
7
71
  * Returns a formatted pagination display string
8
72
  * @param currentPage - The current page number
@@ -16,4 +80,49 @@ export function getPaginationDisplay(currentPage, totalPages, hasMore) {
16
80
  }
17
81
  return `Page ${currentPage} of ${totalPages}`;
18
82
  }
83
+ // ============================================================================
84
+ // Durable Agent Utilities
85
+ // ============================================================================
86
+ /**
87
+ * Check if a step is a doStreamStep (LLM call with conversation input)
88
+ */
89
+ export function isDoStreamStep(stepName) {
90
+ return stepName.endsWith('//doStreamStep');
91
+ }
92
+ /**
93
+ * Extract the conversation from a hydrated doStreamStep input.
94
+ * doStreamStep signature: (conversationPrompt, model, writable, tools, options)
95
+ * So input[0] is the conversation.
96
+ */
97
+ export function extractConversation(stepInput) {
98
+ if (!Array.isArray(stepInput) || stepInput.length === 0) {
99
+ return null;
100
+ }
101
+ const firstArg = stepInput[0];
102
+ if (!Array.isArray(firstArg)) {
103
+ return null;
104
+ }
105
+ // Validate it looks like ModelMessage[]
106
+ if (!firstArg.every((msg) => msg && typeof msg === 'object' && 'role' in msg)) {
107
+ return null;
108
+ }
109
+ return firstArg;
110
+ }
111
+ /**
112
+ * Identifies all stream steps (doStreamStep) in a run and extracts their conversations.
113
+ */
114
+ export function identifyStreamSteps(steps) {
115
+ return steps
116
+ .filter((step) => isDoStreamStep(step.stepName))
117
+ .map((step) => {
118
+ const functionName = step.stepName.split('//').pop() ?? 'unknown';
119
+ const conversation = extractConversation(step.input) ?? [];
120
+ return {
121
+ stepId: step.stepId,
122
+ stepName: step.stepName,
123
+ displayName: functionName,
124
+ conversation,
125
+ };
126
+ });
127
+ }
19
128
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,IAAI,EAAE,MAAM,MAAM,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,UAAU,EAAE,CAAC,GAAG,MAAoB;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,WAAmB,EACnB,UAAkB,EAClB,OAAgB;IAEhB,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,QAAQ,WAAW,OAAO,UAAU,GAAG,CAAC;IACjD,CAAC;IACD,OAAO,QAAQ,WAAW,OAAO,UAAU,EAAE,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"run-trace-view.d.ts","sourceRoot":"","sources":["../src/run-trace-view.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAG5D,UAAU,iBAAiB;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,YAAY,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,iBAAiB,2CA0C7D"}
1
+ {"version":3,"file":"run-trace-view.d.ts","sourceRoot":"","sources":["../src/run-trace-view.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAG5D,UAAU,iBAAiB;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,YAAY,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,iBAAiB,2CAmC7D"}
@@ -10,6 +10,6 @@ export function RunTraceView({ env, runId }) {
10
10
  if (error && !runData) {
11
11
  return (_jsxs("div", { className: "m-4", children: [_jsx(AlertCircle, { className: "h-4 w-4" }), _jsx("p", { children: "Error loading workflow run" }), _jsx("p", { children: error.message })] }));
12
12
  }
13
- return (_jsx("div", { className: "space-y-6", children: _jsxs("div", { className: "relative", children: [loading && (_jsx("div", { className: "absolute inset-0 bg-black/50 flex items-center justify-center", children: _jsx("div", { className: "animate-spin rounded-full h-10 w-10 border-b-2 border-white" }) })), _jsx(WorkflowTraceViewer, { error: error, steps: allSteps, events: allEvents, hooks: allHooks, env: env, run: run, isLoading: loading })] }) }));
13
+ return (_jsx("div", { className: "w-full h-full relative", children: _jsx(WorkflowTraceViewer, { error: error, steps: allSteps, events: allEvents, hooks: allHooks, env: env, run: run, isLoading: loading }) }));
14
14
  }
15
15
  //# sourceMappingURL=run-trace-view.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-trace-view.js","sourceRoot":"","sources":["../src/run-trace-view.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAEvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAO5D,MAAM,UAAU,YAAY,CAAC,EAAE,GAAG,EAAE,KAAK,EAAqB;IAC5D,uCAAuC;IACvC,MAAM,EACJ,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,QAAQ,EACf,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,SAAS,EACjB,OAAO,EACP,KAAK,GACN,GAAG,0BAA0B,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,OAAO,IAAK,EAAkB,CAAC;IAE3C,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;QACtB,OAAO,CACL,eAAK,SAAS,EAAC,KAAK,aAClB,KAAC,WAAW,IAAC,SAAS,EAAC,SAAS,GAAG,EACnC,qDAAiC,EACjC,sBAAI,KAAK,CAAC,OAAO,GAAK,IAClB,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,cAAK,SAAS,EAAC,WAAW,YACxB,eAAK,SAAS,EAAC,UAAU,aACtB,OAAO,IAAI,CACV,cAAK,SAAS,EAAC,+DAA+D,YAC5E,cAAK,SAAS,EAAC,6DAA6D,GAAO,GAC/E,CACP,EACD,KAAC,mBAAmB,IAClB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,QAAQ,EACf,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,OAAO,GAClB,IACE,GACF,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"run-trace-view.js","sourceRoot":"","sources":["../src/run-trace-view.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAEvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAO5D,MAAM,UAAU,YAAY,CAAC,EAAE,GAAG,EAAE,KAAK,EAAqB;IAC5D,uCAAuC;IACvC,MAAM,EACJ,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,QAAQ,EACf,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,SAAS,EACjB,OAAO,EACP,KAAK,GACN,GAAG,0BAA0B,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,OAAO,IAAK,EAAkB,CAAC;IAE3C,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;QACtB,OAAO,CACL,eAAK,SAAS,EAAC,KAAK,aAClB,KAAC,WAAW,IAAC,SAAS,EAAC,SAAS,GAAG,EACnC,qDAAiC,EACjC,sBAAI,KAAK,CAAC,OAAO,GAAK,IAClB,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,cAAK,SAAS,EAAC,wBAAwB,YACrC,KAAC,mBAAmB,IAClB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,QAAQ,EACf,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,OAAO,GAClB,GACE,CACP,CAAC;AACJ,CAAC"}