@burdenoff/microfe-botmanor 2026.1027.2 → 2026.1027.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.
Files changed (80) hide show
  1. package/dist/botlit/BotlitRoutes.js +142 -132
  2. package/dist/botlit/BotlitRoutes.js.map +1 -1
  3. package/dist/botlit/components/AgentApprovalPanel.js +144 -126
  4. package/dist/botlit/components/AgentApprovalPanel.js.map +1 -1
  5. package/dist/botlit/components/ModelRegistrationPanel.js +4 -4
  6. package/dist/botlit/components/VersionHistoryPanel.js +92 -83
  7. package/dist/botlit/components/VersionHistoryPanel.js.map +1 -1
  8. package/dist/botlit/pages/A2AAgentDetailPage.js +212 -203
  9. package/dist/botlit/pages/A2AAgentDetailPage.js.map +1 -1
  10. package/dist/botlit/pages/A2ARegistryPage.js +129 -117
  11. package/dist/botlit/pages/A2ARegistryPage.js.map +1 -1
  12. package/dist/botlit/pages/AgentApprovalsPage.js +122 -110
  13. package/dist/botlit/pages/AgentApprovalsPage.js.map +1 -1
  14. package/dist/botlit/pages/AgentBuilderPage.js +18 -18
  15. package/dist/botlit/pages/AgentDetailPage.js +298 -273
  16. package/dist/botlit/pages/AgentDetailPage.js.map +1 -1
  17. package/dist/botlit/pages/AgentsListPage.js +145 -121
  18. package/dist/botlit/pages/AgentsListPage.js.map +1 -1
  19. package/dist/botlit/pages/BotChannelsTab.js +238 -226
  20. package/dist/botlit/pages/BotChannelsTab.js.map +1 -1
  21. package/dist/botlit/pages/BotDetailPage.js +307 -288
  22. package/dist/botlit/pages/BotDetailPage.js.map +1 -1
  23. package/dist/botlit/pages/BotWorkflowTab.js +125 -116
  24. package/dist/botlit/pages/BotWorkflowTab.js.map +1 -1
  25. package/dist/botlit/pages/BotsListPage.js +159 -144
  26. package/dist/botlit/pages/BotsListPage.js.map +1 -1
  27. package/dist/botlit/pages/BucketsPage.js +279 -258
  28. package/dist/botlit/pages/BucketsPage.js.map +1 -1
  29. package/dist/botlit/pages/ChannelDetailPage.js +346 -328
  30. package/dist/botlit/pages/ChannelDetailPage.js.map +1 -1
  31. package/dist/botlit/pages/ChannelRoutesPage.js +10 -10
  32. package/dist/botlit/pages/ChannelsPage.js +163 -148
  33. package/dist/botlit/pages/ChannelsPage.js.map +1 -1
  34. package/dist/botlit/pages/DashboardPage.js +129 -114
  35. package/dist/botlit/pages/DashboardPage.js.map +1 -1
  36. package/dist/botlit/pages/ExecutionDetailPage.js +145 -139
  37. package/dist/botlit/pages/ExecutionDetailPage.js.map +1 -1
  38. package/dist/botlit/pages/ExecutionsPage.js +14 -14
  39. package/dist/botlit/pages/InstalledPackagesPage.js +245 -227
  40. package/dist/botlit/pages/InstalledPackagesPage.js.map +1 -1
  41. package/dist/botlit/pages/KnowledgeBaseDetailPage.js +168 -156
  42. package/dist/botlit/pages/KnowledgeBaseDetailPage.js.map +1 -1
  43. package/dist/botlit/pages/KnowledgeBasesPage.js +91 -79
  44. package/dist/botlit/pages/KnowledgeBasesPage.js.map +1 -1
  45. package/dist/botlit/pages/MCPServerDetailPage.js +200 -188
  46. package/dist/botlit/pages/MCPServerDetailPage.js.map +1 -1
  47. package/dist/botlit/pages/MCPServersPage.js +170 -155
  48. package/dist/botlit/pages/MCPServersPage.js.map +1 -1
  49. package/dist/botlit/pages/PoliciesPage.js +113 -104
  50. package/dist/botlit/pages/PoliciesPage.js.map +1 -1
  51. package/dist/botlit/pages/PolicyDetailPage.js +145 -133
  52. package/dist/botlit/pages/PolicyDetailPage.js.map +1 -1
  53. package/dist/botlit/pages/PromptStudioPage.js +106 -97
  54. package/dist/botlit/pages/PromptStudioPage.js.map +1 -1
  55. package/dist/botlit/pages/PromptTemplateDetailPage.js +359 -347
  56. package/dist/botlit/pages/PromptTemplateDetailPage.js.map +1 -1
  57. package/dist/botlit/pages/PromptTemplatesPage.js +127 -112
  58. package/dist/botlit/pages/PromptTemplatesPage.js.map +1 -1
  59. package/dist/botlit/pages/RetrievalProfileDetailPage.js +219 -210
  60. package/dist/botlit/pages/RetrievalProfileDetailPage.js.map +1 -1
  61. package/dist/botlit/pages/RetrievalProfilesPage.js +112 -103
  62. package/dist/botlit/pages/RetrievalProfilesPage.js.map +1 -1
  63. package/dist/botlit/pages/SettingsPage.js +264 -252
  64. package/dist/botlit/pages/SettingsPage.js.map +1 -1
  65. package/dist/botlit/pages/SkillDetailPage.js +235 -226
  66. package/dist/botlit/pages/SkillDetailPage.js.map +1 -1
  67. package/dist/botlit/pages/SkillsPage.js +115 -106
  68. package/dist/botlit/pages/SkillsPage.js.map +1 -1
  69. package/dist/botlit/pages/StorePackageDetailPage.js +194 -188
  70. package/dist/botlit/pages/StorePackageDetailPage.js.map +1 -1
  71. package/dist/botlit/pages/StorePage.js +161 -155
  72. package/dist/botlit/pages/StorePage.js.map +1 -1
  73. package/dist/botlit/permissions/PermissionRequired.js +45 -0
  74. package/dist/botlit/permissions/PermissionRequired.js.map +1 -0
  75. package/dist/botlit/permissions/botmanorPermissions.js +72 -0
  76. package/dist/botlit/permissions/botmanorPermissions.js.map +1 -0
  77. package/dist/botlit/permissions/index.js +3 -0
  78. package/dist/botlit/permissions/useBotmanorPermissions.js +19 -0
  79. package/dist/botlit/permissions/useBotmanorPermissions.js.map +1 -0
  80. package/package.json +1 -1
@@ -1,223 +1,229 @@
1
1
  import { useBotlit as e } from "../providers/BotlitProvider.js";
2
2
  import { formatCurrency as t, formatDuration as n, formatNumber as r, formatRelativeTime as i } from "../utils/formatters.js";
3
- import { PageLayout as a } from "../components/PageLayout.js";
4
- import { Card as o, CardContent as s, CardDescription as c, CardHeader as l, CardTitle as u } from "../components/Card.js";
5
- import { Button as d } from "../components/Button.js";
6
- import { Badge as f } from "../components/Badge.js";
7
- import { isNative as p, nativeCopyText as m, nativeToast as h } from "../../utils/nativeBridge.js";
8
- import { EmptyState as g } from "../components/EmptyState.js";
9
- import { ErrorState as _ } from "../components/ErrorState.js";
10
- import { toUnion as v } from "../utils/unions.js";
11
- import { useCreateExecution as y, useExecution as b } from "../hooks/useExecutions.js";
12
- import { ExecutionStatus as x } from "../../generated/wspace-types.js";
13
- import { PagePurpose as S } from "@burdenoff/fe-libs/ui";
14
- import { jsx as C, jsxs as w } from "react/jsx-runtime";
15
- import { useParams as T } from "react-router";
16
- import { AlertTriangle as E, ArrowLeft as D, CheckCircle as O, Clock as k, Copy as A, DollarSign as j, Hourglass as M, Play as N, RefreshCw as P, XCircle as F, Zap as I } from "lucide-react";
17
- import { toast as L } from "sonner";
3
+ import { BOTMANOR_PERMISSIONS as a } from "../permissions/botmanorPermissions.js";
4
+ import { BotmanorPermissionGate as o } from "../permissions/useBotmanorPermissions.js";
5
+ import { PageLayout as s } from "../components/PageLayout.js";
6
+ import { Button as c } from "../components/Button.js";
7
+ import "../permissions/index.js";
8
+ import { Card as l, CardContent as u, CardDescription as d, CardHeader as f, CardTitle as p } from "../components/Card.js";
9
+ import { Badge as m } from "../components/Badge.js";
10
+ import { isNative as h, nativeCopyText as g, nativeToast as _ } from "../../utils/nativeBridge.js";
11
+ import { EmptyState as v } from "../components/EmptyState.js";
12
+ import { ErrorState as y } from "../components/ErrorState.js";
13
+ import { toUnion as b } from "../utils/unions.js";
14
+ import { useCreateExecution as x, useExecution as S } from "../hooks/useExecutions.js";
15
+ import { ExecutionStatus as C } from "../../generated/wspace-types.js";
16
+ import { PagePurpose as w } from "@burdenoff/fe-libs/ui";
17
+ import { jsx as T, jsxs as E } from "react/jsx-runtime";
18
+ import { useParams as D } from "react-router";
19
+ import { AlertTriangle as O, ArrowLeft as k, CheckCircle as A, Clock as j, Copy as M, DollarSign as N, Hourglass as P, Play as F, RefreshCw as I, XCircle as L, Zap as R } from "lucide-react";
20
+ import { toast as z } from "sonner";
18
21
  //#region src/botlit/pages/ExecutionDetailPage.tsx
19
- var R = [
22
+ var B = [
20
23
  "AGENT",
21
24
  "APP",
22
25
  "WORKFLOW"
23
- ], z = (e) => {
26
+ ], V = (e) => {
24
27
  switch (e) {
25
- case x.Completed: return /* @__PURE__ */ C(O, {
28
+ case C.Completed: return /* @__PURE__ */ T(A, {
26
29
  className: "text-status-success-text",
27
30
  size: 20
28
31
  });
29
- case x.Failed:
30
- case x.Timeout: return /* @__PURE__ */ C(F, {
32
+ case C.Failed:
33
+ case C.Timeout: return /* @__PURE__ */ T(L, {
31
34
  className: "text-status-error-text",
32
35
  size: 20
33
36
  });
34
- case x.Cancelled: return /* @__PURE__ */ C(F, {
37
+ case C.Cancelled: return /* @__PURE__ */ T(L, {
35
38
  className: "text-text-secondary",
36
39
  size: 20
37
40
  });
38
- case x.Running: return /* @__PURE__ */ C(P, {
41
+ case C.Running: return /* @__PURE__ */ T(I, {
39
42
  className: "text-status-info-text motion-safe:animate-spin",
40
43
  size: 20
41
44
  });
42
- case x.Pending: return /* @__PURE__ */ C(M, {
45
+ case C.Pending: return /* @__PURE__ */ T(P, {
43
46
  className: "text-status-warning-text",
44
47
  size: 20
45
48
  });
46
- default: return /* @__PURE__ */ C(E, {
49
+ default: return /* @__PURE__ */ T(O, {
47
50
  className: "text-text-secondary",
48
51
  size: 20
49
52
  });
50
53
  }
51
- }, B = (e) => {
54
+ }, H = (e) => {
52
55
  switch (e) {
53
- case x.Completed: return "success";
54
- case x.Failed:
55
- case x.Timeout: return "destructive";
56
- case x.Pending: return "warning";
57
- case x.Running: return "default";
56
+ case C.Completed: return "success";
57
+ case C.Failed:
58
+ case C.Timeout: return "destructive";
59
+ case C.Pending: return "warning";
60
+ case C.Running: return "default";
58
61
  default: return "secondary";
59
62
  }
60
- }, V = () => {
61
- let { executionId: x } = T(), { navigateTo: O } = e(), { data: M, loading: F, error: V, refetch: H } = b(x), [U, W] = y();
62
- if (F) return /* @__PURE__ */ C(a, {
63
+ }, U = () => {
64
+ let { executionId: C } = D(), { navigateTo: A } = e(), { data: P, loading: L, error: U, refetch: W } = S(C), [G, K] = x();
65
+ if (L) return /* @__PURE__ */ T(s, {
63
66
  title: "Loading...",
64
- children: /* @__PURE__ */ C("div", { className: "h-96 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg" })
67
+ children: /* @__PURE__ */ T("div", { className: "h-96 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg" })
65
68
  });
66
- if (V) return /* @__PURE__ */ C(a, {
69
+ if (U) return /* @__PURE__ */ T(s, {
67
70
  title: "Execution",
68
- children: /* @__PURE__ */ C(_, {
71
+ children: /* @__PURE__ */ T(y, {
69
72
  resource: "this execution",
70
- error: V,
71
- onRetry: () => void H()
73
+ error: U,
74
+ onRetry: () => void W()
72
75
  })
73
76
  });
74
- if (!M) return /* @__PURE__ */ C(a, {
77
+ if (!P) return /* @__PURE__ */ T(s, {
75
78
  title: "Execution Not Found",
76
- children: /* @__PURE__ */ C(g, {
79
+ children: /* @__PURE__ */ T(v, {
77
80
  illustration: "empty-search",
78
81
  title: "Execution Not Found",
79
82
  description: "The execution doesn't exist.",
80
- action: /* @__PURE__ */ C(d, {
81
- onClick: () => O("executions"),
83
+ action: /* @__PURE__ */ T(c, {
84
+ onClick: () => A("executions"),
82
85
  children: "Back to Executions"
83
86
  })
84
87
  })
85
88
  });
86
- let G = async () => {
89
+ let q = async () => {
87
90
  try {
88
- let e = await U({ input: {
89
- workspaceId: M.workspaceId,
90
- type: v(M.type, R, "AGENT"),
91
- input: M.input,
92
- appId: M.appId,
93
- agentId: M.agentId,
94
- metadata: { sourceExecutionId: M.id }
91
+ let e = await G({ input: {
92
+ workspaceId: P.workspaceId,
93
+ type: b(P.type, B, "AGENT"),
94
+ input: P.input,
95
+ appId: P.appId,
96
+ agentId: P.agentId,
97
+ metadata: { sourceExecutionId: P.id }
95
98
  } });
96
- L.success("Re-run started"), O(`executions/${e.id}`);
99
+ z.success("Re-run started"), A(`executions/${e.id}`);
97
100
  } catch (e) {
98
- L.error(e instanceof Error ? e.message : "Failed to re-run execution");
101
+ z.error(e instanceof Error ? e.message : "Failed to re-run execution");
99
102
  }
100
103
  };
101
- return /* @__PURE__ */ C(a, {
102
- title: /* @__PURE__ */ w("div", {
104
+ return /* @__PURE__ */ T(s, {
105
+ title: /* @__PURE__ */ E("div", {
103
106
  className: "flex items-center gap-3",
104
107
  children: [
105
- /* @__PURE__ */ C(d, {
108
+ /* @__PURE__ */ T(c, {
106
109
  variant: "ghost",
107
110
  size: "icon",
108
- onClick: () => O("executions"),
109
- children: /* @__PURE__ */ C(D, { size: 20 })
111
+ onClick: () => A("executions"),
112
+ children: /* @__PURE__ */ T(k, { size: 20 })
110
113
  }),
111
- z(M.status),
112
- /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ w("div", {
114
+ V(P.status),
115
+ /* @__PURE__ */ E("div", { children: [/* @__PURE__ */ E("div", {
113
116
  className: "flex items-center gap-2",
114
- children: [/* @__PURE__ */ w("span", { children: [
117
+ children: [/* @__PURE__ */ E("span", { children: [
115
118
  "Execution ",
116
- M.id.slice(0, 8),
119
+ P.id.slice(0, 8),
117
120
  "…"
118
- ] }), /* @__PURE__ */ C(f, {
119
- variant: B(M.status),
120
- children: M.status
121
+ ] }), /* @__PURE__ */ T(m, {
122
+ variant: H(P.status),
123
+ children: P.status
121
124
  })]
122
- }), /* @__PURE__ */ w("p", {
125
+ }), /* @__PURE__ */ E("p", {
123
126
  className: "text-sm font-normal text-text-secondary",
124
127
  children: [
125
- M.appId ?? "—",
128
+ P.appId ?? "—",
126
129
  " / ",
127
- M.agentId ?? "—"
130
+ P.agentId ?? "—"
128
131
  ]
129
132
  })] })
130
133
  ]
131
134
  }),
132
- actions: /* @__PURE__ */ w("div", {
135
+ actions: /* @__PURE__ */ E("div", {
133
136
  className: "flex gap-2",
134
- children: [/* @__PURE__ */ C(d, {
137
+ children: [/* @__PURE__ */ T(c, {
135
138
  variant: "outline",
136
- leftIcon: /* @__PURE__ */ C(A, { size: 16 }),
139
+ leftIcon: /* @__PURE__ */ T(M, { size: 16 }),
137
140
  onClick: () => {
138
- m(M.id), p() && h("Copied");
141
+ g(P.id), h() && _("Copied");
139
142
  },
140
143
  children: "Copy ID"
141
- }), /* @__PURE__ */ C(d, {
142
- leftIcon: /* @__PURE__ */ C(N, { size: 16 }),
143
- onClick: () => void G(),
144
- isLoading: W.loading,
145
- children: "Run again"
144
+ }), /* @__PURE__ */ T(o, {
145
+ permission: a.EXECUTION_CREATE,
146
+ children: /* @__PURE__ */ T(c, {
147
+ leftIcon: /* @__PURE__ */ T(F, { size: 16 }),
148
+ onClick: () => void q(),
149
+ isLoading: K.loading,
150
+ children: "Run again"
151
+ })
146
152
  })]
147
153
  }),
148
- children: /* @__PURE__ */ w("div", {
154
+ children: /* @__PURE__ */ E("div", {
149
155
  className: "space-y-6",
150
156
  children: [
151
- /* @__PURE__ */ C(S, {
152
- icon: /* @__PURE__ */ C(k, { size: 18 }),
157
+ /* @__PURE__ */ T(w, {
158
+ icon: /* @__PURE__ */ T(j, { size: 18 }),
153
159
  children: "This is the record of one agent run — its status, how long it took, the tokens and cost it consumed, and the input and output that produced the result. Use it to debug a failure, understand an unexpected answer, or audit exactly what the agent did on a given request."
154
160
  }),
155
- /* @__PURE__ */ w("div", {
161
+ /* @__PURE__ */ E("div", {
156
162
  className: "grid grid-cols-2 md:grid-cols-4 gap-4",
157
163
  children: [
158
- /* @__PURE__ */ C(o, {
164
+ /* @__PURE__ */ T(l, {
159
165
  treatment: "glass",
160
166
  glow: !0,
161
- children: /* @__PURE__ */ w(s, {
167
+ children: /* @__PURE__ */ E(u, {
162
168
  className: "pt-6 text-center",
163
169
  children: [
164
- /* @__PURE__ */ C(k, { className: "h-6 w-6 mx-auto mb-2 text-text-secondary" }),
165
- /* @__PURE__ */ C("p", {
170
+ /* @__PURE__ */ T(j, { className: "h-6 w-6 mx-auto mb-2 text-text-secondary" }),
171
+ /* @__PURE__ */ T("p", {
166
172
  className: "text-2xl font-bold tabular-nums",
167
- children: M.duration === null || M.duration === void 0 ? "—" : n(M.duration)
173
+ children: P.duration === null || P.duration === void 0 ? "—" : n(P.duration)
168
174
  }),
169
- /* @__PURE__ */ C("p", {
175
+ /* @__PURE__ */ T("p", {
170
176
  className: "text-sm text-text-secondary",
171
177
  children: "Duration"
172
178
  })
173
179
  ]
174
180
  })
175
181
  }),
176
- /* @__PURE__ */ C(o, {
182
+ /* @__PURE__ */ T(l, {
177
183
  treatment: "metric",
178
- children: /* @__PURE__ */ w(s, {
184
+ children: /* @__PURE__ */ E(u, {
179
185
  className: "pt-6 text-center",
180
186
  children: [
181
- /* @__PURE__ */ C(I, { className: "h-6 w-6 mx-auto mb-2 text-text-secondary" }),
182
- /* @__PURE__ */ C("p", {
187
+ /* @__PURE__ */ T(R, { className: "h-6 w-6 mx-auto mb-2 text-text-secondary" }),
188
+ /* @__PURE__ */ T("p", {
183
189
  className: "text-2xl font-bold tabular-nums",
184
- children: r(M.tokensUsed)
190
+ children: r(P.tokensUsed)
185
191
  }),
186
- /* @__PURE__ */ C("p", {
192
+ /* @__PURE__ */ T("p", {
187
193
  className: "text-sm text-text-secondary",
188
194
  children: "Tokens"
189
195
  })
190
196
  ]
191
197
  })
192
198
  }),
193
- /* @__PURE__ */ C(o, {
199
+ /* @__PURE__ */ T(l, {
194
200
  treatment: "metric",
195
- children: /* @__PURE__ */ w(s, {
201
+ children: /* @__PURE__ */ E(u, {
196
202
  className: "pt-6 text-center",
197
203
  children: [
198
- /* @__PURE__ */ C(j, { className: "h-6 w-6 mx-auto mb-2 text-text-secondary" }),
199
- /* @__PURE__ */ C("p", {
204
+ /* @__PURE__ */ T(N, { className: "h-6 w-6 mx-auto mb-2 text-text-secondary" }),
205
+ /* @__PURE__ */ T("p", {
200
206
  className: "text-2xl font-bold tabular-nums",
201
- children: t(M.cost)
207
+ children: t(P.cost)
202
208
  }),
203
- /* @__PURE__ */ C("p", {
209
+ /* @__PURE__ */ T("p", {
204
210
  className: "text-sm text-text-secondary",
205
211
  children: "Cost"
206
212
  })
207
213
  ]
208
214
  })
209
215
  }),
210
- /* @__PURE__ */ C(o, {
216
+ /* @__PURE__ */ T(l, {
211
217
  treatment: "metric",
212
- children: /* @__PURE__ */ w(s, {
218
+ children: /* @__PURE__ */ E(u, {
213
219
  className: "pt-6 text-center",
214
220
  children: [
215
- /* @__PURE__ */ C(P, { className: "h-6 w-6 mx-auto mb-2 text-text-secondary" }),
216
- /* @__PURE__ */ C("p", {
221
+ /* @__PURE__ */ T(I, { className: "h-6 w-6 mx-auto mb-2 text-text-secondary" }),
222
+ /* @__PURE__ */ T("p", {
217
223
  className: "text-2xl font-bold capitalize",
218
- children: M.type.toLowerCase()
224
+ children: P.type.toLowerCase()
219
225
  }),
220
- /* @__PURE__ */ C("p", {
226
+ /* @__PURE__ */ T("p", {
221
227
  className: "text-sm text-text-secondary",
222
228
  children: "Type"
223
229
  })
@@ -226,88 +232,88 @@ var R = [
226
232
  })
227
233
  ]
228
234
  }),
229
- (M.errorMessage || M.errorCode) && /* @__PURE__ */ w(o, { children: [/* @__PURE__ */ w(l, { children: [/* @__PURE__ */ w(u, {
235
+ (P.errorMessage || P.errorCode) && /* @__PURE__ */ E(l, { children: [/* @__PURE__ */ E(f, { children: [/* @__PURE__ */ E(p, {
230
236
  className: "flex items-center gap-2 text-status-error-text",
231
- children: [/* @__PURE__ */ C(E, { size: 18 }), "Failure"]
232
- }), M.errorCode && /* @__PURE__ */ C(c, { children: M.errorCode })] }), /* @__PURE__ */ w(s, {
237
+ children: [/* @__PURE__ */ T(O, { size: 18 }), "Failure"]
238
+ }), P.errorCode && /* @__PURE__ */ T(d, { children: P.errorCode })] }), /* @__PURE__ */ E(u, {
233
239
  className: "space-y-3",
234
- children: [M.errorMessage && /* @__PURE__ */ C("p", {
240
+ children: [P.errorMessage && /* @__PURE__ */ T("p", {
235
241
  className: "text-sm text-text-primary",
236
- children: M.errorMessage
237
- }), M.errorDetails && /* @__PURE__ */ C("pre", {
242
+ children: P.errorMessage
243
+ }), P.errorDetails && /* @__PURE__ */ T("pre", {
238
244
  className: "max-h-64 overflow-auto rounded-lg bg-bg-sunken p-3 font-mono text-xs",
239
- children: JSON.stringify(M.errorDetails, null, 2)
245
+ children: JSON.stringify(P.errorDetails, null, 2)
240
246
  })]
241
247
  })] }),
242
- /* @__PURE__ */ w(o, { children: [/* @__PURE__ */ C(l, { children: /* @__PURE__ */ C(u, { children: "Run Details" }) }), /* @__PURE__ */ C(s, { children: /* @__PURE__ */ w("div", {
248
+ /* @__PURE__ */ E(l, { children: [/* @__PURE__ */ T(f, { children: /* @__PURE__ */ T(p, { children: "Run Details" }) }), /* @__PURE__ */ T(u, { children: /* @__PURE__ */ E("div", {
243
249
  className: "grid grid-cols-1 gap-6 md:grid-cols-3",
244
250
  children: [
245
- /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("p", {
251
+ /* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("p", {
246
252
  className: "text-sm text-text-secondary",
247
253
  children: "Execution ID"
248
- }), /* @__PURE__ */ C("p", {
254
+ }), /* @__PURE__ */ T("p", {
249
255
  className: "font-mono text-sm break-all",
250
- children: M.id
256
+ children: P.id
251
257
  })] }),
252
- /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("p", {
258
+ /* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("p", {
253
259
  className: "text-sm text-text-secondary",
254
260
  children: "Bot"
255
- }), /* @__PURE__ */ C("p", {
261
+ }), /* @__PURE__ */ T("p", {
256
262
  className: "font-mono text-sm break-all",
257
- children: M.appId ?? "—"
263
+ children: P.appId ?? "—"
258
264
  })] }),
259
- /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("p", {
265
+ /* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("p", {
260
266
  className: "text-sm text-text-secondary",
261
267
  children: "Agent"
262
- }), /* @__PURE__ */ C("p", {
268
+ }), /* @__PURE__ */ T("p", {
263
269
  className: "font-mono text-sm break-all",
264
- children: M.agentId ?? "—"
270
+ children: P.agentId ?? "—"
265
271
  })] }),
266
- /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("p", {
272
+ /* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("p", {
267
273
  className: "text-sm text-text-secondary",
268
274
  children: "Conversation"
269
- }), /* @__PURE__ */ C("p", {
275
+ }), /* @__PURE__ */ T("p", {
270
276
  className: "font-mono text-sm break-all",
271
- children: M.conversationId ?? "—"
277
+ children: P.conversationId ?? "—"
272
278
  })] }),
273
- /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("p", {
279
+ /* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("p", {
274
280
  className: "text-sm text-text-secondary",
275
281
  children: "Started"
276
- }), /* @__PURE__ */ C("p", {
282
+ }), /* @__PURE__ */ T("p", {
277
283
  className: "font-medium",
278
- children: i(M.createdAt)
284
+ children: i(P.createdAt)
279
285
  })] }),
280
- /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("p", {
286
+ /* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("p", {
281
287
  className: "text-sm text-text-secondary",
282
288
  children: "Completed"
283
- }), /* @__PURE__ */ C("p", {
289
+ }), /* @__PURE__ */ T("p", {
284
290
  className: "font-medium",
285
- children: i(M.completedAt)
291
+ children: i(P.completedAt)
286
292
  })] })
287
293
  ]
288
294
  }) })] }),
289
- /* @__PURE__ */ w("div", {
295
+ /* @__PURE__ */ E("div", {
290
296
  className: "grid grid-cols-1 gap-6 lg:grid-cols-2",
291
- children: [/* @__PURE__ */ w(o, { children: [/* @__PURE__ */ C(l, { children: /* @__PURE__ */ C(u, { children: "Input" }) }), /* @__PURE__ */ C(s, { children: /* @__PURE__ */ C("pre", {
297
+ children: [/* @__PURE__ */ E(l, { children: [/* @__PURE__ */ T(f, { children: /* @__PURE__ */ T(p, { children: "Input" }) }), /* @__PURE__ */ T(u, { children: /* @__PURE__ */ T("pre", {
292
298
  className: "max-h-96 overflow-auto whitespace-pre-wrap rounded-lg bg-bg-sunken p-3 text-sm",
293
- children: M.input
294
- }) })] }), /* @__PURE__ */ w(o, { children: [/* @__PURE__ */ C(l, { children: /* @__PURE__ */ C(u, { children: "Output" }) }), /* @__PURE__ */ C(s, { children: M.output ? /* @__PURE__ */ C("pre", {
299
+ children: P.input
300
+ }) })] }), /* @__PURE__ */ E(l, { children: [/* @__PURE__ */ T(f, { children: /* @__PURE__ */ T(p, { children: "Output" }) }), /* @__PURE__ */ T(u, { children: P.output ? /* @__PURE__ */ T("pre", {
295
301
  className: "max-h-96 overflow-auto whitespace-pre-wrap rounded-lg bg-bg-sunken p-3 text-sm",
296
- children: M.output
297
- }) : /* @__PURE__ */ C("p", {
302
+ children: P.output
303
+ }) : /* @__PURE__ */ T("p", {
298
304
  className: "text-sm text-text-secondary",
299
305
  children: "This run has not produced an output yet."
300
306
  }) })] })]
301
307
  }),
302
- M.metadata && Object.keys(M.metadata).length > 0 && /* @__PURE__ */ w(o, { children: [/* @__PURE__ */ C(l, { children: /* @__PURE__ */ C(u, { children: "Metadata" }) }), /* @__PURE__ */ C(s, { children: /* @__PURE__ */ C("pre", {
308
+ P.metadata && Object.keys(P.metadata).length > 0 && /* @__PURE__ */ E(l, { children: [/* @__PURE__ */ T(f, { children: /* @__PURE__ */ T(p, { children: "Metadata" }) }), /* @__PURE__ */ T(u, { children: /* @__PURE__ */ T("pre", {
303
309
  className: "max-h-64 overflow-auto rounded-lg bg-bg-sunken p-3 font-mono text-xs",
304
- children: JSON.stringify(M.metadata, null, 2)
310
+ children: JSON.stringify(P.metadata, null, 2)
305
311
  }) })] })
306
312
  ]
307
313
  })
308
314
  });
309
315
  };
310
316
  //#endregion
311
- export { V as ExecutionDetailPage };
317
+ export { U as ExecutionDetailPage };
312
318
 
313
319
  //# sourceMappingURL=ExecutionDetailPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExecutionDetailPage.js","names":[],"sources":["../../../src/botlit/pages/ExecutionDetailPage.tsx"],"sourcesContent":["/**\n * Execution Detail Page\n * @module botlit/pages\n */\n\nimport type { FC } from 'react';\nimport { useParams } from 'react-router';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { isNative, nativeCopyText, nativeToast } from '../../utils/nativeBridge';\nimport {\n ArrowLeft,\n Play,\n Clock,\n DollarSign,\n Zap,\n AlertTriangle,\n CheckCircle,\n XCircle,\n RefreshCw,\n Hourglass,\n Copy,\n} from 'lucide-react';\nimport { toast } from 'sonner';\nimport { PageLayout } from '../components/PageLayout';\nimport { PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { EmptyState } from '../components/EmptyState';\nimport { Card, CardHeader, CardTitle, CardContent, CardDescription } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { Badge } from '../components/Badge';\nimport { ErrorState } from '../components/ErrorState';\nimport { useExecution, useCreateExecution } from '../hooks/useExecutions';\nimport {\n formatNumber,\n formatCurrency,\n formatDuration,\n formatRelativeTime,\n MISSING_VALUE,\n} from '../utils/formatters';\nimport { toUnion } from '../utils/unions';\n\n/** Execution kinds `CreateExecutionInput.type` accepts. */\nconst EXECUTION_TYPES = ['AGENT', 'APP', 'WORKFLOW'] as const;\nimport { ExecutionStatus as GqlExecutionStatus } from '../../generated/wspace-types';\n\nconst getStatusIcon = (status: string) => {\n switch (status) {\n case GqlExecutionStatus.Completed:\n return <CheckCircle className=\"text-status-success-text\" size={20} />;\n case GqlExecutionStatus.Failed:\n case GqlExecutionStatus.Timeout:\n return <XCircle className=\"text-status-error-text\" size={20} />;\n case GqlExecutionStatus.Cancelled:\n return <XCircle className=\"text-text-secondary\" size={20} />;\n case GqlExecutionStatus.Running:\n return <RefreshCw className=\"text-status-info-text motion-safe:animate-spin\" size={20} />;\n case GqlExecutionStatus.Pending:\n return <Hourglass className=\"text-status-warning-text\" size={20} />;\n default:\n return <AlertTriangle className=\"text-text-secondary\" size={20} />;\n }\n};\n\nconst getStatusBadgeVariant = (\n status: string\n): 'success' | 'destructive' | 'warning' | 'secondary' | 'default' => {\n switch (status) {\n case GqlExecutionStatus.Completed:\n return 'success';\n case GqlExecutionStatus.Failed:\n case GqlExecutionStatus.Timeout:\n return 'destructive';\n case GqlExecutionStatus.Pending:\n return 'warning';\n case GqlExecutionStatus.Running:\n return 'default';\n default:\n return 'secondary';\n }\n};\n\nexport const ExecutionDetailPage: FC = () => {\n const { executionId } = useParams();\n const { navigateTo } = useBotlit();\n const { data: execution, loading, error, refetch } = useExecution(executionId);\n const [createExecution, createExecutionState] = useCreateExecution();\n\n if (loading) {\n return (\n <PageLayout title=\"Loading...\">\n <div className=\"h-96 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg\" />\n </PageLayout>\n );\n }\n\n if (error) {\n return (\n <PageLayout title=\"Execution\">\n <ErrorState resource=\"this execution\" error={error} onRetry={() => void refetch()} />\n </PageLayout>\n );\n }\n\n if (!execution) {\n return (\n <PageLayout title=\"Execution Not Found\">\n <EmptyState\n illustration=\"empty-search\"\n title=\"Execution Not Found\"\n description=\"The execution doesn't exist.\"\n action={<Button onClick={() => navigateTo('executions')}>Back to Executions</Button>}\n />\n </PageLayout>\n );\n }\n\n /**\n * Re-runs this execution's input. The service has no dedicated replay\n * operation, so this creates a fresh execution with the same input and a\n * pointer back to the run it came from.\n */\n const handleReplay = async () => {\n try {\n const created = await createExecution({\n input: {\n workspaceId: execution.workspaceId,\n type: toUnion(execution.type, EXECUTION_TYPES, 'AGENT'),\n input: execution.input,\n appId: execution.appId,\n agentId: execution.agentId,\n metadata: { sourceExecutionId: execution.id },\n },\n });\n toast.success('Re-run started');\n navigateTo(`executions/${created.id}`);\n } catch (err) {\n toast.error(err instanceof Error ? err.message : 'Failed to re-run execution');\n }\n };\n\n return (\n <PageLayout\n title={\n <div className=\"flex items-center gap-3\">\n <Button variant=\"ghost\" size=\"icon\" onClick={() => navigateTo('executions')}>\n <ArrowLeft size={20} />\n </Button>\n {getStatusIcon(execution.status)}\n <div>\n <div className=\"flex items-center gap-2\">\n <span>Execution {execution.id.slice(0, 8)}…</span>\n <Badge variant={getStatusBadgeVariant(execution.status)}>{execution.status}</Badge>\n </div>\n <p className=\"text-sm font-normal text-text-secondary\">\n {execution.appId ?? MISSING_VALUE} / {execution.agentId ?? MISSING_VALUE}\n </p>\n </div>\n </div>\n }\n actions={\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n leftIcon={<Copy size={16} />}\n onClick={() => {\n void nativeCopyText(execution.id);\n if (isNative()) void nativeToast('Copied');\n }}\n >\n Copy ID\n </Button>\n <Button\n leftIcon={<Play size={16} />}\n onClick={() => void handleReplay()}\n isLoading={createExecutionState.loading}\n >\n Run again\n </Button>\n </div>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Clock size={18} />}>\n This is the record of one agent run — its status, how long it took, the tokens and cost it\n consumed, and the input and output that produced the result. Use it to debug a failure,\n understand an unexpected answer, or audit exactly what the agent did on a given request.\n </PagePurpose>\n\n {/* Metrics Summary */}\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n <Card treatment=\"glass\" glow>\n <CardContent className=\"pt-6 text-center\">\n <Clock className=\"h-6 w-6 mx-auto mb-2 text-text-secondary\" />\n <p className=\"text-2xl font-bold tabular-nums\">\n {execution.duration === null || execution.duration === undefined\n ? MISSING_VALUE\n : formatDuration(execution.duration)}\n </p>\n <p className=\"text-sm text-text-secondary\">Duration</p>\n </CardContent>\n </Card>\n <Card treatment=\"metric\">\n <CardContent className=\"pt-6 text-center\">\n <Zap className=\"h-6 w-6 mx-auto mb-2 text-text-secondary\" />\n <p className=\"text-2xl font-bold tabular-nums\">\n {formatNumber(execution.tokensUsed)}\n </p>\n <p className=\"text-sm text-text-secondary\">Tokens</p>\n </CardContent>\n </Card>\n <Card treatment=\"metric\">\n <CardContent className=\"pt-6 text-center\">\n <DollarSign className=\"h-6 w-6 mx-auto mb-2 text-text-secondary\" />\n <p className=\"text-2xl font-bold tabular-nums\">{formatCurrency(execution.cost)}</p>\n <p className=\"text-sm text-text-secondary\">Cost</p>\n </CardContent>\n </Card>\n <Card treatment=\"metric\">\n <CardContent className=\"pt-6 text-center\">\n <RefreshCw className=\"h-6 w-6 mx-auto mb-2 text-text-secondary\" />\n <p className=\"text-2xl font-bold capitalize\">{execution.type.toLowerCase()}</p>\n <p className=\"text-sm text-text-secondary\">Type</p>\n </CardContent>\n </Card>\n </div>\n\n {/* Failure details */}\n {(execution.errorMessage || execution.errorCode) && (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2 text-status-error-text\">\n <AlertTriangle size={18} />\n Failure\n </CardTitle>\n {execution.errorCode && <CardDescription>{execution.errorCode}</CardDescription>}\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {execution.errorMessage && (\n <p className=\"text-sm text-text-primary\">{execution.errorMessage}</p>\n )}\n {execution.errorDetails && (\n <pre className=\"max-h-64 overflow-auto rounded-lg bg-bg-sunken p-3 font-mono text-xs\">\n {JSON.stringify(execution.errorDetails, null, 2)}\n </pre>\n )}\n </CardContent>\n </Card>\n )}\n\n {/* Identity & timings */}\n <Card>\n <CardHeader>\n <CardTitle>Run Details</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-1 gap-6 md:grid-cols-3\">\n <div>\n <p className=\"text-sm text-text-secondary\">Execution ID</p>\n <p className=\"font-mono text-sm break-all\">{execution.id}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Bot</p>\n <p className=\"font-mono text-sm break-all\">{execution.appId ?? MISSING_VALUE}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Agent</p>\n <p className=\"font-mono text-sm break-all\">{execution.agentId ?? MISSING_VALUE}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Conversation</p>\n <p className=\"font-mono text-sm break-all\">\n {execution.conversationId ?? MISSING_VALUE}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Started</p>\n <p className=\"font-medium\">{formatRelativeTime(execution.createdAt)}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Completed</p>\n <p className=\"font-medium\">{formatRelativeTime(execution.completedAt)}</p>\n </div>\n </div>\n </CardContent>\n </Card>\n\n {/* Input / Output */}\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-2\">\n <Card>\n <CardHeader>\n <CardTitle>Input</CardTitle>\n </CardHeader>\n <CardContent>\n <pre className=\"max-h-96 overflow-auto whitespace-pre-wrap rounded-lg bg-bg-sunken p-3 text-sm\">\n {execution.input}\n </pre>\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle>Output</CardTitle>\n </CardHeader>\n <CardContent>\n {execution.output ? (\n <pre className=\"max-h-96 overflow-auto whitespace-pre-wrap rounded-lg bg-bg-sunken p-3 text-sm\">\n {execution.output}\n </pre>\n ) : (\n <p className=\"text-sm text-text-secondary\">\n This run has not produced an output yet.\n </p>\n )}\n </CardContent>\n </Card>\n </div>\n\n {/* Metadata */}\n {execution.metadata && Object.keys(execution.metadata).length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle>Metadata</CardTitle>\n </CardHeader>\n <CardContent>\n <pre className=\"max-h-64 overflow-auto rounded-lg bg-bg-sunken p-3 font-mono text-xs\">\n {JSON.stringify(execution.metadata, null, 2)}\n </pre>\n </CardContent>\n </Card>\n )}\n </div>\n </PageLayout>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAyCA,IAAM,IAAkB;CAAC;CAAS;CAAO;CAAW,EAG9C,KAAiB,MAAmB;AACxC,SAAQ,GAAR;EACE,KAAK,EAAmB,UACtB,QAAO,kBAAC,GAAD;GAAa,WAAU;GAA2B,MAAM;GAAM,CAAA;EACvE,KAAK,EAAmB;EACxB,KAAK,EAAmB,QACtB,QAAO,kBAAC,GAAD;GAAS,WAAU;GAAyB,MAAM;GAAM,CAAA;EACjE,KAAK,EAAmB,UACtB,QAAO,kBAAC,GAAD;GAAS,WAAU;GAAsB,MAAM;GAAM,CAAA;EAC9D,KAAK,EAAmB,QACtB,QAAO,kBAAC,GAAD;GAAW,WAAU;GAAiD,MAAM;GAAM,CAAA;EAC3F,KAAK,EAAmB,QACtB,QAAO,kBAAC,GAAD;GAAW,WAAU;GAA2B,MAAM;GAAM,CAAA;EACrE,QACE,QAAO,kBAAC,GAAD;GAAe,WAAU;GAAsB,MAAM;GAAM,CAAA;;GAIlE,KACJ,MACoE;AACpE,SAAQ,GAAR;EACE,KAAK,EAAmB,UACtB,QAAO;EACT,KAAK,EAAmB;EACxB,KAAK,EAAmB,QACtB,QAAO;EACT,KAAK,EAAmB,QACtB,QAAO;EACT,KAAK,EAAmB,QACtB,QAAO;EACT,QACE,QAAO;;GAIA,UAAgC;CAC3C,IAAM,EAAE,mBAAgB,GAAW,EAC7B,EAAE,kBAAe,GAAW,EAC5B,EAAE,MAAM,GAAW,YAAS,UAAO,eAAY,EAAa,EAAY,EACxE,CAAC,GAAiB,KAAwB,GAAoB;AAEpE,KAAI,EACF,QACE,kBAAC,GAAD;EAAY,OAAM;YAChB,kBAAC,OAAD,EAAK,WAAU,+DAAgE,CAAA;EACpE,CAAA;AAIjB,KAAI,EACF,QACE,kBAAC,GAAD;EAAY,OAAM;YAChB,kBAAC,GAAD;GAAY,UAAS;GAAwB;GAAO,eAAe,KAAK,GAAS;GAAI,CAAA;EAC1E,CAAA;AAIjB,KAAI,CAAC,EACH,QACE,kBAAC,GAAD;EAAY,OAAM;YAChB,kBAAC,GAAD;GACE,cAAa;GACb,OAAM;GACN,aAAY;GACZ,QAAQ,kBAAC,GAAD;IAAQ,eAAe,EAAW,aAAa;cAAE;IAA2B,CAAA;GACpF,CAAA;EACS,CAAA;CASjB,IAAM,IAAe,YAAY;AAC/B,MAAI;GACF,IAAM,IAAU,MAAM,EAAgB,EACpC,OAAO;IACL,aAAa,EAAU;IACvB,MAAM,EAAQ,EAAU,MAAM,GAAiB,QAAQ;IACvD,OAAO,EAAU;IACjB,OAAO,EAAU;IACjB,SAAS,EAAU;IACnB,UAAU,EAAE,mBAAmB,EAAU,IAAI;IAC9C,EACF,CAAC;AAEF,GADA,EAAM,QAAQ,iBAAiB,EAC/B,EAAW,cAAc,EAAQ,KAAK;WAC/B,GAAK;AACZ,KAAM,MAAM,aAAe,QAAQ,EAAI,UAAU,6BAA6B;;;AAIlF,QACE,kBAAC,GAAD;EACE,OACE,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,GAAD;KAAQ,SAAQ;KAAQ,MAAK;KAAO,eAAe,EAAW,aAAa;eACzE,kBAAC,GAAD,EAAW,MAAM,IAAM,CAAA;KAChB,CAAA;IACR,EAAc,EAAU,OAAO;IAChC,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,QAAD,EAAA,UAAA;MAAM;MAAW,EAAU,GAAG,MAAM,GAAG,EAAE;MAAC;MAAQ,EAAA,CAAA,EAClD,kBAAC,GAAD;MAAO,SAAS,EAAsB,EAAU,OAAO;gBAAG,EAAU;MAAe,CAAA,CAC/E;QACN,kBAAC,KAAD;KAAG,WAAU;eAAb;MACG,EAAU,SAAA;MAAuB;MAAI,EAAU,WAAA;MAC9C;OACA,EAAA,CAAA;IACF;;EAER,SACE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,GAAD;IACE,SAAQ;IACR,UAAU,kBAAC,GAAD,EAAM,MAAM,IAAM,CAAA;IAC5B,eAAe;AAEb,KADK,EAAe,EAAU,GAAG,EAC7B,GAAU,IAAO,EAAY,SAAS;;cAE7C;IAEQ,CAAA,EACT,kBAAC,GAAD;IACE,UAAU,kBAAC,GAAD,EAAM,MAAM,IAAM,CAAA;IAC5B,eAAe,KAAK,GAAc;IAClC,WAAW,EAAqB;cACjC;IAEQ,CAAA,CACL;;YAGR,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,GAAD;KAAa,MAAM,kBAAC,GAAD,EAAO,MAAM,IAAM,CAAA;eAAE;KAI1B,CAAA;IAGd,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,GAAD;OAAM,WAAU;OAAQ,MAAA;iBACtB,kBAAC,GAAD;QAAa,WAAU;kBAAvB;SACE,kBAAC,GAAD,EAAO,WAAU,4CAA6C,CAAA;SAC9D,kBAAC,KAAD;UAAG,WAAU;oBACV,EAAU,aAAa,QAAQ,EAAU,aAAa,KAAA,IAAA,MAEnD,EAAe,EAAU,SAAS;UACpC,CAAA;SACJ,kBAAC,KAAD;UAAG,WAAU;oBAA8B;UAAY,CAAA;SAC3C;;OACT,CAAA;MACP,kBAAC,GAAD;OAAM,WAAU;iBACd,kBAAC,GAAD;QAAa,WAAU;kBAAvB;SACE,kBAAC,GAAD,EAAK,WAAU,4CAA6C,CAAA;SAC5D,kBAAC,KAAD;UAAG,WAAU;oBACV,EAAa,EAAU,WAAW;UACjC,CAAA;SACJ,kBAAC,KAAD;UAAG,WAAU;oBAA8B;UAAU,CAAA;SACzC;;OACT,CAAA;MACP,kBAAC,GAAD;OAAM,WAAU;iBACd,kBAAC,GAAD;QAAa,WAAU;kBAAvB;SACE,kBAAC,GAAD,EAAY,WAAU,4CAA6C,CAAA;SACnE,kBAAC,KAAD;UAAG,WAAU;oBAAmC,EAAe,EAAU,KAAK;UAAK,CAAA;SACnF,kBAAC,KAAD;UAAG,WAAU;oBAA8B;UAAQ,CAAA;SACvC;;OACT,CAAA;MACP,kBAAC,GAAD;OAAM,WAAU;iBACd,kBAAC,GAAD;QAAa,WAAU;kBAAvB;SACE,kBAAC,GAAD,EAAW,WAAU,4CAA6C,CAAA;SAClE,kBAAC,KAAD;UAAG,WAAU;oBAAiC,EAAU,KAAK,aAAa;UAAK,CAAA;SAC/E,kBAAC,KAAD;UAAG,WAAU;oBAA8B;UAAQ,CAAA;SACvC;;OACT,CAAA;MACH;;KAGJ,EAAU,gBAAgB,EAAU,cACpC,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;KAAW,WAAU;eAArB,CACE,kBAAC,GAAD,EAAe,MAAM,IAAM,CAAA,EAAA,UAEjB;QACX,EAAU,aAAa,kBAAC,GAAD,EAAA,UAAkB,EAAU,WAA4B,CAAA,CACrE,EAAA,CAAA,EACb,kBAAC,GAAD;KAAa,WAAU;eAAvB,CACG,EAAU,gBACT,kBAAC,KAAD;MAAG,WAAU;gBAA6B,EAAU;MAAiB,CAAA,EAEtE,EAAU,gBACT,kBAAC,OAAD;MAAK,WAAU;gBACZ,KAAK,UAAU,EAAU,cAAc,MAAM,EAAE;MAC5C,CAAA,CAEI;OACT,EAAA,CAAA;IAIT,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAW,eAAuB,CAAA,EACvB,CAAA,EACb,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;OAAG,WAAU;iBAA8B;OAAgB,CAAA,EAC3D,kBAAC,KAAD;OAAG,WAAU;iBAA+B,EAAU;OAAO,CAAA,CACzD,EAAA,CAAA;MACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;OAAG,WAAU;iBAA8B;OAAO,CAAA,EAClD,kBAAC,KAAD;OAAG,WAAU;iBAA+B,EAAU,SAAA;OAA2B,CAAA,CAC7E,EAAA,CAAA;MACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;OAAG,WAAU;iBAA8B;OAAS,CAAA,EACpD,kBAAC,KAAD;OAAG,WAAU;iBAA+B,EAAU,WAAA;OAA6B,CAAA,CAC/E,EAAA,CAAA;MACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;OAAG,WAAU;iBAA8B;OAAgB,CAAA,EAC3D,kBAAC,KAAD;OAAG,WAAU;iBACV,EAAU,kBAAA;OACT,CAAA,CACA,EAAA,CAAA;MACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;OAAG,WAAU;iBAA8B;OAAW,CAAA,EACtD,kBAAC,KAAD;OAAG,WAAU;iBAAe,EAAmB,EAAU,UAAU;OAAK,CAAA,CACpE,EAAA,CAAA;MACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;OAAG,WAAU;iBAA8B;OAAa,CAAA,EACxD,kBAAC,KAAD;OAAG,WAAU;iBAAe,EAAmB,EAAU,YAAY;OAAK,CAAA,CACtE,EAAA,CAAA;MACF;QACM,CAAA,CACT,EAAA,CAAA;IAGP,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAW,SAAiB,CAAA,EACjB,CAAA,EACb,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;MAAK,WAAU;gBACZ,EAAU;MACP,CAAA,EACM,CAAA,CACT,EAAA,CAAA,EACP,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAW,UAAkB,CAAA,EAClB,CAAA,EACb,kBAAC,GAAD,EAAA,UACG,EAAU,SACT,kBAAC,OAAD;MAAK,WAAU;gBACZ,EAAU;MACP,CAAA,GAEN,kBAAC,KAAD;MAAG,WAAU;gBAA8B;MAEvC,CAAA,EAEM,CAAA,CACT,EAAA,CAAA,CACH;;IAGL,EAAU,YAAY,OAAO,KAAK,EAAU,SAAS,CAAC,SAAS,KAC9D,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAW,YAAoB,CAAA,EACpB,CAAA,EACb,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;KAAK,WAAU;eACZ,KAAK,UAAU,EAAU,UAAU,MAAM,EAAE;KACxC,CAAA,EACM,CAAA,CACT,EAAA,CAAA;IAEL;;EACK,CAAA"}
1
+ {"version":3,"file":"ExecutionDetailPage.js","names":[],"sources":["../../../src/botlit/pages/ExecutionDetailPage.tsx"],"sourcesContent":["/**\n * Execution Detail Page\n * @module botlit/pages\n */\n\nimport type { FC } from 'react';\nimport { useParams } from 'react-router';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { isNative, nativeCopyText, nativeToast } from '../../utils/nativeBridge';\nimport {\n ArrowLeft,\n Play,\n Clock,\n DollarSign,\n Zap,\n AlertTriangle,\n CheckCircle,\n XCircle,\n RefreshCw,\n Hourglass,\n Copy,\n} from 'lucide-react';\nimport { toast } from 'sonner';\nimport { PageLayout } from '../components/PageLayout';\nimport { PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { EmptyState } from '../components/EmptyState';\nimport { Card, CardHeader, CardTitle, CardContent, CardDescription } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { Badge } from '../components/Badge';\nimport { ErrorState } from '../components/ErrorState';\nimport { useExecution, useCreateExecution } from '../hooks/useExecutions';\nimport {\n formatNumber,\n formatCurrency,\n formatDuration,\n formatRelativeTime,\n MISSING_VALUE,\n} from '../utils/formatters';\nimport { toUnion } from '../utils/unions';\n\n/** Execution kinds `CreateExecutionInput.type` accepts. */\nconst EXECUTION_TYPES = ['AGENT', 'APP', 'WORKFLOW'] as const;\nimport { ExecutionStatus as GqlExecutionStatus } from '../../generated/wspace-types';\nimport { BOTMANOR_PERMISSIONS, BotmanorPermissionGate } from '../permissions';\n\nconst getStatusIcon = (status: string) => {\n switch (status) {\n case GqlExecutionStatus.Completed:\n return <CheckCircle className=\"text-status-success-text\" size={20} />;\n case GqlExecutionStatus.Failed:\n case GqlExecutionStatus.Timeout:\n return <XCircle className=\"text-status-error-text\" size={20} />;\n case GqlExecutionStatus.Cancelled:\n return <XCircle className=\"text-text-secondary\" size={20} />;\n case GqlExecutionStatus.Running:\n return <RefreshCw className=\"text-status-info-text motion-safe:animate-spin\" size={20} />;\n case GqlExecutionStatus.Pending:\n return <Hourglass className=\"text-status-warning-text\" size={20} />;\n default:\n return <AlertTriangle className=\"text-text-secondary\" size={20} />;\n }\n};\n\nconst getStatusBadgeVariant = (\n status: string\n): 'success' | 'destructive' | 'warning' | 'secondary' | 'default' => {\n switch (status) {\n case GqlExecutionStatus.Completed:\n return 'success';\n case GqlExecutionStatus.Failed:\n case GqlExecutionStatus.Timeout:\n return 'destructive';\n case GqlExecutionStatus.Pending:\n return 'warning';\n case GqlExecutionStatus.Running:\n return 'default';\n default:\n return 'secondary';\n }\n};\n\nexport const ExecutionDetailPage: FC = () => {\n const { executionId } = useParams();\n const { navigateTo } = useBotlit();\n const { data: execution, loading, error, refetch } = useExecution(executionId);\n const [createExecution, createExecutionState] = useCreateExecution();\n\n if (loading) {\n return (\n <PageLayout title=\"Loading...\">\n <div className=\"h-96 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg\" />\n </PageLayout>\n );\n }\n\n if (error) {\n return (\n <PageLayout title=\"Execution\">\n <ErrorState resource=\"this execution\" error={error} onRetry={() => void refetch()} />\n </PageLayout>\n );\n }\n\n if (!execution) {\n return (\n <PageLayout title=\"Execution Not Found\">\n <EmptyState\n illustration=\"empty-search\"\n title=\"Execution Not Found\"\n description=\"The execution doesn't exist.\"\n action={<Button onClick={() => navigateTo('executions')}>Back to Executions</Button>}\n />\n </PageLayout>\n );\n }\n\n /**\n * Re-runs this execution's input. The service has no dedicated replay\n * operation, so this creates a fresh execution with the same input and a\n * pointer back to the run it came from.\n */\n const handleReplay = async () => {\n try {\n const created = await createExecution({\n input: {\n workspaceId: execution.workspaceId,\n type: toUnion(execution.type, EXECUTION_TYPES, 'AGENT'),\n input: execution.input,\n appId: execution.appId,\n agentId: execution.agentId,\n metadata: { sourceExecutionId: execution.id },\n },\n });\n toast.success('Re-run started');\n navigateTo(`executions/${created.id}`);\n } catch (err) {\n toast.error(err instanceof Error ? err.message : 'Failed to re-run execution');\n }\n };\n\n return (\n <PageLayout\n title={\n <div className=\"flex items-center gap-3\">\n <Button variant=\"ghost\" size=\"icon\" onClick={() => navigateTo('executions')}>\n <ArrowLeft size={20} />\n </Button>\n {getStatusIcon(execution.status)}\n <div>\n <div className=\"flex items-center gap-2\">\n <span>Execution {execution.id.slice(0, 8)}…</span>\n <Badge variant={getStatusBadgeVariant(execution.status)}>{execution.status}</Badge>\n </div>\n <p className=\"text-sm font-normal text-text-secondary\">\n {execution.appId ?? MISSING_VALUE} / {execution.agentId ?? MISSING_VALUE}\n </p>\n </div>\n </div>\n }\n actions={\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n leftIcon={<Copy size={16} />}\n onClick={() => {\n void nativeCopyText(execution.id);\n if (isNative()) void nativeToast('Copied');\n }}\n >\n Copy ID\n </Button>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.EXECUTION_CREATE}>\n <Button\n leftIcon={<Play size={16} />}\n onClick={() => void handleReplay()}\n isLoading={createExecutionState.loading}\n >\n Run again\n </Button>\n </BotmanorPermissionGate>\n </div>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Clock size={18} />}>\n This is the record of one agent run — its status, how long it took, the tokens and cost it\n consumed, and the input and output that produced the result. Use it to debug a failure,\n understand an unexpected answer, or audit exactly what the agent did on a given request.\n </PagePurpose>\n\n {/* Metrics Summary */}\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n <Card treatment=\"glass\" glow>\n <CardContent className=\"pt-6 text-center\">\n <Clock className=\"h-6 w-6 mx-auto mb-2 text-text-secondary\" />\n <p className=\"text-2xl font-bold tabular-nums\">\n {execution.duration === null || execution.duration === undefined\n ? MISSING_VALUE\n : formatDuration(execution.duration)}\n </p>\n <p className=\"text-sm text-text-secondary\">Duration</p>\n </CardContent>\n </Card>\n <Card treatment=\"metric\">\n <CardContent className=\"pt-6 text-center\">\n <Zap className=\"h-6 w-6 mx-auto mb-2 text-text-secondary\" />\n <p className=\"text-2xl font-bold tabular-nums\">\n {formatNumber(execution.tokensUsed)}\n </p>\n <p className=\"text-sm text-text-secondary\">Tokens</p>\n </CardContent>\n </Card>\n <Card treatment=\"metric\">\n <CardContent className=\"pt-6 text-center\">\n <DollarSign className=\"h-6 w-6 mx-auto mb-2 text-text-secondary\" />\n <p className=\"text-2xl font-bold tabular-nums\">{formatCurrency(execution.cost)}</p>\n <p className=\"text-sm text-text-secondary\">Cost</p>\n </CardContent>\n </Card>\n <Card treatment=\"metric\">\n <CardContent className=\"pt-6 text-center\">\n <RefreshCw className=\"h-6 w-6 mx-auto mb-2 text-text-secondary\" />\n <p className=\"text-2xl font-bold capitalize\">{execution.type.toLowerCase()}</p>\n <p className=\"text-sm text-text-secondary\">Type</p>\n </CardContent>\n </Card>\n </div>\n\n {/* Failure details */}\n {(execution.errorMessage || execution.errorCode) && (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2 text-status-error-text\">\n <AlertTriangle size={18} />\n Failure\n </CardTitle>\n {execution.errorCode && <CardDescription>{execution.errorCode}</CardDescription>}\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {execution.errorMessage && (\n <p className=\"text-sm text-text-primary\">{execution.errorMessage}</p>\n )}\n {execution.errorDetails && (\n <pre className=\"max-h-64 overflow-auto rounded-lg bg-bg-sunken p-3 font-mono text-xs\">\n {JSON.stringify(execution.errorDetails, null, 2)}\n </pre>\n )}\n </CardContent>\n </Card>\n )}\n\n {/* Identity & timings */}\n <Card>\n <CardHeader>\n <CardTitle>Run Details</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-1 gap-6 md:grid-cols-3\">\n <div>\n <p className=\"text-sm text-text-secondary\">Execution ID</p>\n <p className=\"font-mono text-sm break-all\">{execution.id}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Bot</p>\n <p className=\"font-mono text-sm break-all\">{execution.appId ?? MISSING_VALUE}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Agent</p>\n <p className=\"font-mono text-sm break-all\">{execution.agentId ?? MISSING_VALUE}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Conversation</p>\n <p className=\"font-mono text-sm break-all\">\n {execution.conversationId ?? MISSING_VALUE}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Started</p>\n <p className=\"font-medium\">{formatRelativeTime(execution.createdAt)}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Completed</p>\n <p className=\"font-medium\">{formatRelativeTime(execution.completedAt)}</p>\n </div>\n </div>\n </CardContent>\n </Card>\n\n {/* Input / Output */}\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-2\">\n <Card>\n <CardHeader>\n <CardTitle>Input</CardTitle>\n </CardHeader>\n <CardContent>\n <pre className=\"max-h-96 overflow-auto whitespace-pre-wrap rounded-lg bg-bg-sunken p-3 text-sm\">\n {execution.input}\n </pre>\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle>Output</CardTitle>\n </CardHeader>\n <CardContent>\n {execution.output ? (\n <pre className=\"max-h-96 overflow-auto whitespace-pre-wrap rounded-lg bg-bg-sunken p-3 text-sm\">\n {execution.output}\n </pre>\n ) : (\n <p className=\"text-sm text-text-secondary\">\n This run has not produced an output yet.\n </p>\n )}\n </CardContent>\n </Card>\n </div>\n\n {/* Metadata */}\n {execution.metadata && Object.keys(execution.metadata).length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle>Metadata</CardTitle>\n </CardHeader>\n <CardContent>\n <pre className=\"max-h-64 overflow-auto rounded-lg bg-bg-sunken p-3 font-mono text-xs\">\n {JSON.stringify(execution.metadata, null, 2)}\n </pre>\n </CardContent>\n </Card>\n )}\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}