@contractspec/example.agent-console 3.7.7 → 3.8.4

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 (191) hide show
  1. package/.turbo/turbo-build.log +126 -105
  2. package/AGENTS.md +3 -1
  3. package/CHANGELOG.md +57 -0
  4. package/README.md +46 -9
  5. package/dist/agent/agent.handler.d.ts +3 -0
  6. package/dist/agent/agent.handler.js +730 -1
  7. package/dist/agent/index.js +73 -72
  8. package/dist/agent.feature.js +179 -0
  9. package/dist/browser/agent/agent.handler.js +730 -1
  10. package/dist/browser/agent/index.js +73 -72
  11. package/dist/browser/agent.feature.js +179 -0
  12. package/dist/browser/docs/agent-console.docblock.js +11 -8
  13. package/dist/browser/docs/index.js +11 -8
  14. package/dist/browser/example.js +2 -3
  15. package/dist/browser/handlers/agent.handlers.js +1883 -2
  16. package/dist/browser/handlers/index.js +2142 -8
  17. package/dist/browser/index.js +3347 -2433
  18. package/dist/browser/presentations/index.js +49 -49
  19. package/dist/browser/run/index.js +818 -812
  20. package/dist/browser/run/run.handler.js +666 -1
  21. package/dist/browser/shared/index.js +293 -1
  22. package/dist/browser/shared/mock-runs.js +5 -0
  23. package/dist/browser/tool/index.js +331 -331
  24. package/dist/browser/tool/tool.handler.js +479 -3
  25. package/dist/browser/ui/AgentDashboard.js +1204 -319
  26. package/dist/browser/ui/AgentDashboard.visualizations.js +217 -0
  27. package/dist/browser/ui/AgentRunList.js +359 -127
  28. package/dist/browser/ui/hooks/index.js +468 -18
  29. package/dist/browser/ui/hooks/useAgentMutations.js +443 -8
  30. package/dist/browser/ui/hooks/useRunList.js +25 -10
  31. package/dist/browser/ui/index.js +1293 -390
  32. package/dist/browser/ui/renderers/agent-list.markdown.js +14 -5
  33. package/dist/browser/ui/renderers/dashboard.markdown.js +207 -36
  34. package/dist/browser/ui/renderers/index.js +245 -49
  35. package/dist/browser/ui/renderers/run-list.markdown.js +9 -4
  36. package/dist/browser/ui/renderers/tool-registry.markdown.js +15 -4
  37. package/dist/browser/ui/views/RunDataTable.js +326 -0
  38. package/dist/browser/ui/views/RunListView.js +359 -127
  39. package/dist/browser/ui/views/index.js +406 -174
  40. package/dist/browser/ui/views/run-data-table.columns.js +271 -0
  41. package/dist/browser/ui/views/run-list.shared.js +177 -0
  42. package/dist/browser/visualizations/catalog.js +134 -0
  43. package/dist/browser/visualizations/index.js +187 -0
  44. package/dist/browser/visualizations/selectors.js +181 -0
  45. package/dist/docs/agent-console.docblock.js +11 -8
  46. package/dist/docs/index.js +11 -8
  47. package/dist/example.js +2 -3
  48. package/dist/example.test.d.ts +1 -0
  49. package/dist/handlers/agent.handlers.d.ts +2 -0
  50. package/dist/handlers/agent.handlers.js +1883 -2
  51. package/dist/handlers/index.d.ts +1 -3
  52. package/dist/handlers/index.js +2142 -8
  53. package/dist/handlers/mock-handlers.test.d.ts +1 -0
  54. package/dist/index.d.ts +2 -0
  55. package/dist/index.js +3347 -2433
  56. package/dist/node/agent/agent.handler.js +730 -1
  57. package/dist/node/agent/index.js +73 -72
  58. package/dist/node/agent.feature.js +179 -0
  59. package/dist/node/docs/agent-console.docblock.js +11 -8
  60. package/dist/node/docs/index.js +11 -8
  61. package/dist/node/example.js +2 -3
  62. package/dist/node/handlers/agent.handlers.js +1883 -2
  63. package/dist/node/handlers/index.js +2142 -8
  64. package/dist/node/index.js +3347 -2433
  65. package/dist/node/presentations/index.js +49 -49
  66. package/dist/node/run/index.js +818 -812
  67. package/dist/node/run/run.handler.js +666 -1
  68. package/dist/node/shared/index.js +293 -1
  69. package/dist/node/shared/mock-runs.js +5 -0
  70. package/dist/node/tool/index.js +331 -331
  71. package/dist/node/tool/tool.handler.js +479 -3
  72. package/dist/node/ui/AgentDashboard.js +1204 -319
  73. package/dist/node/ui/AgentDashboard.visualizations.js +217 -0
  74. package/dist/node/ui/AgentRunList.js +359 -127
  75. package/dist/node/ui/hooks/index.js +468 -18
  76. package/dist/node/ui/hooks/useAgentMutations.js +443 -8
  77. package/dist/node/ui/hooks/useRunList.js +25 -10
  78. package/dist/node/ui/index.js +1293 -390
  79. package/dist/node/ui/renderers/agent-list.markdown.js +14 -5
  80. package/dist/node/ui/renderers/dashboard.markdown.js +207 -36
  81. package/dist/node/ui/renderers/index.js +245 -49
  82. package/dist/node/ui/renderers/run-list.markdown.js +9 -4
  83. package/dist/node/ui/renderers/tool-registry.markdown.js +15 -4
  84. package/dist/node/ui/views/RunDataTable.js +326 -0
  85. package/dist/node/ui/views/RunListView.js +359 -127
  86. package/dist/node/ui/views/index.js +406 -174
  87. package/dist/node/ui/views/run-data-table.columns.js +271 -0
  88. package/dist/node/ui/views/run-list.shared.js +177 -0
  89. package/dist/node/visualizations/catalog.js +134 -0
  90. package/dist/node/visualizations/index.js +187 -0
  91. package/dist/node/visualizations/selectors.js +181 -0
  92. package/dist/presentations/index.js +49 -49
  93. package/dist/proof/index.d.ts +2 -0
  94. package/dist/proof/meetup-proof.d.ts +10 -0
  95. package/dist/proof/meetup-proof.runtime.d.ts +22 -0
  96. package/dist/proof/meetup-proof.scenario.d.ts +2 -0
  97. package/dist/proof/meetup-proof.suite.d.ts +1 -0
  98. package/dist/proof/meetup-proof.test.d.ts +1 -0
  99. package/dist/run/index.js +818 -812
  100. package/dist/run/run.handler.d.ts +4 -0
  101. package/dist/run/run.handler.js +666 -1
  102. package/dist/shared/demo-dashboard-data.d.ts +16 -0
  103. package/dist/shared/demo-runtime-seed.d.ts +17 -0
  104. package/dist/shared/demo-runtime.d.ts +8 -0
  105. package/dist/shared/demo-runtime.test.d.ts +1 -0
  106. package/dist/shared/index.d.ts +3 -0
  107. package/dist/shared/index.js +293 -1
  108. package/dist/shared/mock-runs.d.ts +4 -0
  109. package/dist/shared/mock-runs.js +5 -0
  110. package/dist/tool/index.js +331 -331
  111. package/dist/tool/tool.handler.d.ts +4 -1
  112. package/dist/tool/tool.handler.js +479 -3
  113. package/dist/ui/AgentDashboard.js +1204 -319
  114. package/dist/ui/AgentDashboard.sandbox.test.d.ts +1 -0
  115. package/dist/ui/AgentDashboard.visualizations.d.ts +4 -0
  116. package/dist/ui/AgentDashboard.visualizations.js +218 -0
  117. package/dist/ui/AgentRunList.js +359 -127
  118. package/dist/ui/hooks/index.js +468 -18
  119. package/dist/ui/hooks/useAgentMutations.js +443 -8
  120. package/dist/ui/hooks/useRunList.d.ts +8 -2
  121. package/dist/ui/hooks/useRunList.js +25 -10
  122. package/dist/ui/index.js +1293 -390
  123. package/dist/ui/renderers/agent-list.markdown.d.ts +1 -1
  124. package/dist/ui/renderers/agent-list.markdown.js +14 -5
  125. package/dist/ui/renderers/agent-list.renderer.d.ts +1 -1
  126. package/dist/ui/renderers/dashboard.markdown.d.ts +1 -1
  127. package/dist/ui/renderers/dashboard.markdown.js +207 -36
  128. package/dist/ui/renderers/index.js +245 -49
  129. package/dist/ui/renderers/run-list.markdown.d.ts +1 -1
  130. package/dist/ui/renderers/run-list.markdown.js +9 -4
  131. package/dist/ui/renderers/tool-registry.markdown.d.ts +2 -2
  132. package/dist/ui/renderers/tool-registry.markdown.js +15 -4
  133. package/dist/ui/views/RunDataTable.d.ts +18 -0
  134. package/dist/ui/views/RunDataTable.js +327 -0
  135. package/dist/ui/views/RunListView.js +359 -127
  136. package/dist/ui/views/index.js +406 -174
  137. package/dist/ui/views/run-data-table.columns.d.ts +3 -0
  138. package/dist/ui/views/run-data-table.columns.js +272 -0
  139. package/dist/ui/views/run-list.shared.d.ts +14 -0
  140. package/dist/ui/views/run-list.shared.js +178 -0
  141. package/dist/visualizations/catalog.d.ts +10 -0
  142. package/dist/visualizations/catalog.js +135 -0
  143. package/dist/visualizations/index.d.ts +2 -0
  144. package/dist/visualizations/index.js +188 -0
  145. package/dist/visualizations/selectors.d.ts +3 -0
  146. package/dist/visualizations/selectors.js +182 -0
  147. package/dist/visualizations/selectors.test.d.ts +1 -0
  148. package/package.json +114 -11
  149. package/proofs/agent-console-meetup.replay.json +220 -0
  150. package/src/agent/agent.handler.ts +18 -1
  151. package/src/agent.feature.ts +3 -0
  152. package/src/docs/agent-console.docblock.ts +11 -8
  153. package/src/example.test.ts +75 -0
  154. package/src/example.ts +2 -3
  155. package/src/handlers/agent.handlers.ts +55 -2
  156. package/src/handlers/index.ts +18 -2
  157. package/src/handlers/mock-handlers.test.ts +77 -0
  158. package/src/index.ts +2 -0
  159. package/src/proof/index.ts +2 -0
  160. package/src/proof/meetup-proof.runtime.ts +196 -0
  161. package/src/proof/meetup-proof.scenario.ts +99 -0
  162. package/src/proof/meetup-proof.suite.ts +29 -0
  163. package/src/proof/meetup-proof.test.ts +28 -0
  164. package/src/proof/meetup-proof.ts +130 -0
  165. package/src/run/run.handler.ts +17 -1
  166. package/src/shared/demo-dashboard-data.ts +58 -0
  167. package/src/shared/demo-runtime-seed.ts +139 -0
  168. package/src/shared/demo-runtime.test.ts +169 -0
  169. package/src/shared/demo-runtime.ts +260 -0
  170. package/src/shared/index.ts +11 -0
  171. package/src/shared/mock-runs.ts +5 -0
  172. package/src/tool/tool.handler.ts +21 -4
  173. package/src/ui/AgentDashboard.sandbox.test.tsx +312 -0
  174. package/src/ui/AgentDashboard.tsx +4 -1
  175. package/src/ui/AgentDashboard.visualizations.tsx +35 -0
  176. package/src/ui/hooks/useAgentMutations.ts +19 -11
  177. package/src/ui/hooks/useRunList.ts +41 -9
  178. package/src/ui/renderers/agent-list.markdown.ts +32 -13
  179. package/src/ui/renderers/agent-list.renderer.tsx +1 -1
  180. package/src/ui/renderers/dashboard.markdown.ts +38 -43
  181. package/src/ui/renderers/run-list.markdown.ts +17 -9
  182. package/src/ui/renderers/tool-registry.markdown.ts +22 -10
  183. package/src/ui/views/RunDataTable.tsx +74 -0
  184. package/src/ui/views/RunListView.tsx +37 -111
  185. package/src/ui/views/run-data-table.columns.tsx +102 -0
  186. package/src/ui/views/run-list.shared.tsx +139 -0
  187. package/src/visualizations/catalog.ts +132 -0
  188. package/src/visualizations/index.ts +2 -0
  189. package/src/visualizations/selectors.test.ts +12 -0
  190. package/src/visualizations/selectors.ts +70 -0
  191. package/tsdown.config.js +17 -0
@@ -61,7 +61,10 @@ function useRunList(options = {}) {
61
61
  const [metrics, setMetrics] = useState2(null);
62
62
  const [loading, setLoading] = useState2(true);
63
63
  const [error, setError] = useState2(null);
64
- const [page, setPage] = useState2(1);
64
+ const [internalPageIndex, setInternalPageIndex] = useState2(0);
65
+ const pageSize = options.pageSize ?? options.limit ?? 20;
66
+ const pageIndex = options.pageIndex ?? internalPageIndex;
67
+ const [sort] = options.sorting ?? [];
65
68
  const fetchData = useCallback2(async () => {
66
69
  setLoading(true);
67
70
  setError(null);
@@ -71,14 +74,14 @@ function useRunList(options = {}) {
71
74
  projectId,
72
75
  agentId: options.agentId,
73
76
  status: options.status === "all" ? undefined : options.status,
74
- limit: options.limit ?? 20,
75
- offset: (page - 1) * (options.limit ?? 20)
77
+ sortBy: sort?.id,
78
+ sortDirection: sort ? sort.desc ? "desc" : "asc" : undefined,
79
+ limit: pageSize,
80
+ offset: pageIndex * pageSize
76
81
  }),
77
82
  agent.getRunMetrics({
78
83
  projectId,
79
- agentId: options.agentId,
80
- startDate: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000),
81
- endDate: new Date
84
+ agentId: options.agentId
82
85
  })
83
86
  ]);
84
87
  setData(runsResult);
@@ -88,31 +91,38 @@ function useRunList(options = {}) {
88
91
  } finally {
89
92
  setLoading(false);
90
93
  }
91
- }, [agent, projectId, options.agentId, options.status, options.limit, page]);
94
+ }, [
95
+ agent,
96
+ pageIndex,
97
+ pageSize,
98
+ projectId,
99
+ options.agentId,
100
+ options.status,
101
+ sort?.desc,
102
+ sort?.id
103
+ ]);
92
104
  useEffect2(() => {
93
105
  fetchData();
94
106
  }, [fetchData]);
107
+ const hasControlledPagination = options.pageIndex !== undefined;
95
108
  return {
96
109
  data,
97
110
  metrics,
98
111
  loading,
99
112
  error,
100
- page,
113
+ page: pageIndex + 1,
114
+ pageIndex,
115
+ pageSize,
101
116
  refetch: fetchData,
102
- nextPage: () => setPage((p) => p + 1),
103
- prevPage: () => page > 1 && setPage((p) => p - 1)
117
+ nextPage: hasControlledPagination ? undefined : () => setInternalPageIndex((current) => current + 1),
118
+ prevPage: hasControlledPagination ? undefined : () => setInternalPageIndex((current) => Math.max(0, current - 1))
104
119
  };
105
120
  }
106
121
 
107
- // src/ui/views/RunListView.tsx
108
- import {
109
- EmptyState,
110
- ErrorState,
111
- LoaderBlock,
112
- StatCard,
113
- StatCardGroup,
114
- StatusChip
115
- } from "@contractspec/lib.design-system";
122
+ // src/ui/views/run-list.shared.tsx
123
+ import { Button, StatusChip } from "@contractspec/lib.design-system";
124
+ import { HStack, VStack } from "@contractspec/lib.ui-kit-web/ui/stack";
125
+ import { Text } from "@contractspec/lib.ui-kit-web/ui/text";
116
126
  import { jsxDEV } from "react/jsx-dev-runtime";
117
127
  "use client";
118
128
  function getStatusTone(status) {
@@ -151,15 +161,320 @@ function formatCost(cost) {
151
161
  return "-";
152
162
  return `$${cost.toFixed(4)}`;
153
163
  }
164
+ function formatJson(value) {
165
+ return JSON.stringify(value ?? null, null, 2);
166
+ }
167
+ function RunExpandedContent({ run }) {
168
+ return /* @__PURE__ */ jsxDEV(VStack, {
169
+ gap: "sm",
170
+ className: "py-2",
171
+ children: [
172
+ /* @__PURE__ */ jsxDEV(HStack, {
173
+ justify: "between",
174
+ className: "flex-wrap",
175
+ children: [
176
+ /* @__PURE__ */ jsxDEV(StatusChip, {
177
+ tone: getStatusTone(run.status),
178
+ label: run.status
179
+ }, undefined, false, undefined, this),
180
+ /* @__PURE__ */ jsxDEV(Text, {
181
+ className: "text-muted-foreground text-sm",
182
+ children: [
183
+ "Queued ",
184
+ run.queuedAt.toLocaleString()
185
+ ]
186
+ }, undefined, true, undefined, this)
187
+ ]
188
+ }, undefined, true, undefined, this),
189
+ /* @__PURE__ */ jsxDEV(HStack, {
190
+ gap: "lg",
191
+ className: "flex-wrap",
192
+ children: [
193
+ /* @__PURE__ */ jsxDEV(Text, {
194
+ className: "text-muted-foreground text-sm",
195
+ children: [
196
+ "Prompt ",
197
+ formatTokens(run.promptTokens)
198
+ ]
199
+ }, undefined, true, undefined, this),
200
+ /* @__PURE__ */ jsxDEV(Text, {
201
+ className: "text-muted-foreground text-sm",
202
+ children: [
203
+ "Completion ",
204
+ formatTokens(run.completionTokens)
205
+ ]
206
+ }, undefined, true, undefined, this),
207
+ /* @__PURE__ */ jsxDEV(Text, {
208
+ className: "text-muted-foreground text-sm",
209
+ children: [
210
+ "Duration ",
211
+ formatDuration(run.durationMs)
212
+ ]
213
+ }, undefined, true, undefined, this)
214
+ ]
215
+ }, undefined, true, undefined, this),
216
+ /* @__PURE__ */ jsxDEV(VStack, {
217
+ gap: "xs",
218
+ children: [
219
+ /* @__PURE__ */ jsxDEV(Text, {
220
+ className: "font-medium text-sm",
221
+ children: "Input"
222
+ }, undefined, false, undefined, this),
223
+ /* @__PURE__ */ jsxDEV("pre", {
224
+ className: "overflow-auto rounded-md bg-muted/40 p-3 text-xs",
225
+ children: formatJson(run.input)
226
+ }, undefined, false, undefined, this)
227
+ ]
228
+ }, undefined, true, undefined, this),
229
+ /* @__PURE__ */ jsxDEV(VStack, {
230
+ gap: "xs",
231
+ children: [
232
+ /* @__PURE__ */ jsxDEV(Text, {
233
+ className: "font-medium text-sm",
234
+ children: "Output"
235
+ }, undefined, false, undefined, this),
236
+ /* @__PURE__ */ jsxDEV("pre", {
237
+ className: "overflow-auto rounded-md bg-muted/40 p-3 text-xs",
238
+ children: formatJson(run.output ?? run.errorMessage ?? "Pending")
239
+ }, undefined, false, undefined, this)
240
+ ]
241
+ }, undefined, true, undefined, this)
242
+ ]
243
+ }, undefined, true, undefined, this);
244
+ }
245
+ function RunTableToolbar({
246
+ controller,
247
+ totalRuns
248
+ }) {
249
+ const firstRow = controller.rows[0];
250
+ const queuedColumn = controller.columns.find((column) => column.id === "queuedAt");
251
+ const durationColumn = controller.columns.find((column) => column.id === "durationMs");
252
+ const costColumn = controller.columns.find((column) => column.id === "estimatedCostUsd");
253
+ return /* @__PURE__ */ jsxDEV(HStack, {
254
+ gap: "sm",
255
+ className: "flex-wrap",
256
+ children: [
257
+ /* @__PURE__ */ jsxDEV(Text, {
258
+ className: "text-muted-foreground text-sm",
259
+ children: [
260
+ totalRuns,
261
+ " runs"
262
+ ]
263
+ }, undefined, true, undefined, this),
264
+ /* @__PURE__ */ jsxDEV(Button, {
265
+ variant: "outline",
266
+ size: "sm",
267
+ onPress: () => firstRow?.toggleExpanded?.(!firstRow?.isExpanded),
268
+ children: "Expand Latest Run"
269
+ }, undefined, false, undefined, this),
270
+ /* @__PURE__ */ jsxDEV(Button, {
271
+ variant: "outline",
272
+ size: "sm",
273
+ onPress: () => queuedColumn?.toggleVisibility?.(!queuedColumn?.visible),
274
+ children: queuedColumn?.visible ? "Hide Time" : "Show Time"
275
+ }, undefined, false, undefined, this),
276
+ /* @__PURE__ */ jsxDEV(Button, {
277
+ variant: "outline",
278
+ size: "sm",
279
+ onPress: () => durationColumn?.toggleVisibility?.(!durationColumn?.visible),
280
+ children: durationColumn?.visible ? "Hide Duration" : "Show Duration"
281
+ }, undefined, false, undefined, this),
282
+ /* @__PURE__ */ jsxDEV(Button, {
283
+ variant: "outline",
284
+ size: "sm",
285
+ onPress: () => costColumn?.toggleVisibility?.(!costColumn?.visible),
286
+ children: costColumn?.visible ? "Hide Cost" : "Show Cost"
287
+ }, undefined, false, undefined, this)
288
+ ]
289
+ }, undefined, true, undefined, this);
290
+ }
291
+
292
+ // src/ui/views/run-data-table.columns.tsx
293
+ import { StatusChip as StatusChip2 } from "@contractspec/lib.design-system";
294
+ import { VStack as VStack2 } from "@contractspec/lib.ui-kit-web/ui/stack";
295
+ import { Text as Text2 } from "@contractspec/lib.ui-kit-web/ui/text";
296
+ import { jsxDEV as jsxDEV2 } from "react/jsx-dev-runtime";
297
+ "use client";
298
+ function createRunTableColumns() {
299
+ return [
300
+ {
301
+ id: "queuedAt",
302
+ header: "Run",
303
+ label: "Run",
304
+ accessor: (run) => run.queuedAt.getTime(),
305
+ cell: ({ item }) => /* @__PURE__ */ jsxDEV2(VStack2, {
306
+ gap: "xs",
307
+ children: [
308
+ /* @__PURE__ */ jsxDEV2(Text2, {
309
+ className: "font-mono text-sm",
310
+ children: item.id.slice(-8)
311
+ }, undefined, false, undefined, this),
312
+ /* @__PURE__ */ jsxDEV2(Text2, {
313
+ className: "text-muted-foreground text-xs",
314
+ children: item.queuedAt.toLocaleString()
315
+ }, undefined, false, undefined, this)
316
+ ]
317
+ }, undefined, true, undefined, this),
318
+ size: 220,
319
+ minSize: 180,
320
+ canSort: true,
321
+ canHide: true,
322
+ canResize: true
323
+ },
324
+ {
325
+ id: "agentName",
326
+ header: "Agent",
327
+ label: "Agent",
328
+ accessor: (run) => run.agentName ?? "Unknown Agent",
329
+ cell: ({ value }) => /* @__PURE__ */ jsxDEV2(Text2, {
330
+ className: "font-medium",
331
+ children: typeof value === "string" ? value : "Unknown Agent"
332
+ }, undefined, false, undefined, this),
333
+ size: 220,
334
+ canSort: true,
335
+ canResize: true
336
+ },
337
+ {
338
+ id: "status",
339
+ header: "Status",
340
+ label: "Status",
341
+ accessorKey: "status",
342
+ cell: ({ value }) => {
343
+ const status = typeof value === "string" ? value : "QUEUED";
344
+ return /* @__PURE__ */ jsxDEV2(StatusChip2, {
345
+ tone: getStatusTone(status),
346
+ label: status
347
+ }, undefined, false, undefined, this);
348
+ },
349
+ size: 150,
350
+ canSort: true,
351
+ canResize: true
352
+ },
353
+ {
354
+ id: "totalTokens",
355
+ header: "Tokens",
356
+ label: "Tokens",
357
+ accessorKey: "totalTokens",
358
+ cell: ({ value }) => formatTokens(Number(value ?? 0)),
359
+ align: "right",
360
+ size: 140,
361
+ canSort: true,
362
+ canResize: true
363
+ },
364
+ {
365
+ id: "durationMs",
366
+ header: "Duration",
367
+ label: "Duration",
368
+ accessorKey: "durationMs",
369
+ cell: ({ value }) => formatDuration(typeof value === "number" ? value : undefined),
370
+ align: "right",
371
+ size: 140,
372
+ canSort: true,
373
+ canHide: true,
374
+ canResize: true
375
+ },
376
+ {
377
+ id: "estimatedCostUsd",
378
+ header: "Cost",
379
+ label: "Cost",
380
+ accessorKey: "estimatedCostUsd",
381
+ cell: ({ value }) => formatCost(typeof value === "number" ? value : undefined),
382
+ align: "right",
383
+ size: 140,
384
+ canSort: true,
385
+ canHide: true,
386
+ canResize: true
387
+ }
388
+ ];
389
+ }
390
+
391
+ // src/ui/views/RunDataTable.tsx
392
+ import { DataTable } from "@contractspec/lib.design-system";
393
+ import { useContractTable } from "@contractspec/lib.presentation-runtime-react";
394
+ import * as React from "react";
395
+ import { jsxDEV as jsxDEV3 } from "react/jsx-dev-runtime";
396
+ "use client";
397
+ function RunDataTable({
398
+ runs,
399
+ totalItems,
400
+ pageIndex,
401
+ pageSize,
402
+ sorting,
403
+ loading,
404
+ onSortingChange,
405
+ onPaginationChange,
406
+ onRunClick
407
+ }) {
408
+ const columns = React.useMemo(() => createRunTableColumns(), []);
409
+ const controller = useContractTable({
410
+ data: runs,
411
+ columns,
412
+ executionMode: "server",
413
+ totalItems,
414
+ state: {
415
+ sorting,
416
+ pagination: { pageIndex, pageSize }
417
+ },
418
+ onSortingChange,
419
+ onPaginationChange,
420
+ initialState: {
421
+ columnVisibility: { estimatedCostUsd: false }
422
+ },
423
+ getRowId: (run) => run.id,
424
+ renderExpandedContent: (run) => /* @__PURE__ */ jsxDEV3(RunExpandedContent, {
425
+ run
426
+ }, undefined, false, undefined, this),
427
+ getCanExpand: () => true
428
+ });
429
+ return /* @__PURE__ */ jsxDEV3(DataTable, {
430
+ controller,
431
+ title: "Run History",
432
+ description: "Server-mode ContractSpec table with shared pagination, sorting, visibility, and expansion.",
433
+ loading,
434
+ onRowPress: (row) => onRunClick?.(row.id),
435
+ toolbar: /* @__PURE__ */ jsxDEV3(RunTableToolbar, {
436
+ controller,
437
+ totalRuns: totalItems
438
+ }, undefined, false, undefined, this),
439
+ emptyState: /* @__PURE__ */ jsxDEV3("div", {
440
+ className: "rounded-md border border-dashed p-8 text-center text-muted-foreground text-sm",
441
+ children: "No runs yet"
442
+ }, undefined, false, undefined, this)
443
+ }, undefined, false, undefined, this);
444
+ }
445
+
446
+ // src/ui/views/RunListView.tsx
447
+ import {
448
+ EmptyState,
449
+ ErrorState,
450
+ LoaderBlock,
451
+ StatCard,
452
+ StatCardGroup
453
+ } from "@contractspec/lib.design-system";
454
+ import { useState as useState3 } from "react";
455
+ import { jsxDEV as jsxDEV4 } from "react/jsx-dev-runtime";
456
+ "use client";
154
457
  function RunListView({ agentId, onRunClick }) {
155
- const { data, metrics, loading, error, refetch } = useRunList({ agentId });
458
+ const [sorting, setSorting] = useState3([
459
+ { id: "queuedAt", desc: true }
460
+ ]);
461
+ const [pagination, setPagination] = useState3({
462
+ pageIndex: 0,
463
+ pageSize: 3
464
+ });
465
+ const { data, metrics, loading, error, refetch } = useRunList({
466
+ agentId,
467
+ pageIndex: pagination.pageIndex,
468
+ pageSize: pagination.pageSize,
469
+ sorting
470
+ });
156
471
  if (loading && !data) {
157
- return /* @__PURE__ */ jsxDEV(LoaderBlock, {
472
+ return /* @__PURE__ */ jsxDEV4(LoaderBlock, {
158
473
  label: "Loading runs..."
159
474
  }, undefined, false, undefined, this);
160
475
  }
161
476
  if (error) {
162
- return /* @__PURE__ */ jsxDEV(ErrorState, {
477
+ return /* @__PURE__ */ jsxDEV4(ErrorState, {
163
478
  title: "Failed to load runs",
164
479
  description: error.message,
165
480
  onRetry: refetch,
@@ -167,145 +482,62 @@ function RunListView({ agentId, onRunClick }) {
167
482
  }, undefined, false, undefined, this);
168
483
  }
169
484
  if (!data?.items.length) {
170
- return /* @__PURE__ */ jsxDEV(EmptyState, {
485
+ return /* @__PURE__ */ jsxDEV4(EmptyState, {
171
486
  title: "No runs yet",
172
487
  description: "Execute an agent to see run history here."
173
488
  }, undefined, false, undefined, this);
174
489
  }
175
- return /* @__PURE__ */ jsxDEV("div", {
490
+ return /* @__PURE__ */ jsxDEV4("div", {
176
491
  className: "space-y-6",
177
492
  children: [
178
- metrics && /* @__PURE__ */ jsxDEV(StatCardGroup, {
493
+ metrics ? /* @__PURE__ */ jsxDEV4(StatCardGroup, {
179
494
  children: [
180
- /* @__PURE__ */ jsxDEV(StatCard, {
495
+ /* @__PURE__ */ jsxDEV4(StatCard, {
181
496
  label: "Total Runs",
182
497
  value: metrics.totalRuns
183
498
  }, undefined, false, undefined, this),
184
- /* @__PURE__ */ jsxDEV(StatCard, {
499
+ /* @__PURE__ */ jsxDEV4(StatCard, {
185
500
  label: "Success Rate",
186
501
  value: `${(metrics.successRate * 100).toFixed(1)}%`
187
502
  }, undefined, false, undefined, this),
188
- /* @__PURE__ */ jsxDEV(StatCard, {
503
+ /* @__PURE__ */ jsxDEV4(StatCard, {
189
504
  label: "Total Tokens",
190
505
  value: formatTokens(metrics.totalTokens)
191
506
  }, undefined, false, undefined, this),
192
- /* @__PURE__ */ jsxDEV(StatCard, {
507
+ /* @__PURE__ */ jsxDEV4(StatCard, {
193
508
  label: "Total Cost",
194
509
  value: `$${metrics.totalCostUsd.toFixed(2)}`
195
510
  }, undefined, false, undefined, this)
196
511
  ]
197
- }, undefined, true, undefined, this),
198
- /* @__PURE__ */ jsxDEV("div", {
199
- className: "rounded-lg border border-border",
200
- children: /* @__PURE__ */ jsxDEV("table", {
201
- className: "w-full",
202
- children: [
203
- /* @__PURE__ */ jsxDEV("thead", {
204
- className: "border-border border-b bg-muted/30",
205
- children: /* @__PURE__ */ jsxDEV("tr", {
206
- children: [
207
- /* @__PURE__ */ jsxDEV("th", {
208
- className: "px-4 py-3 text-left font-medium text-muted-foreground text-sm",
209
- children: "Run"
210
- }, undefined, false, undefined, this),
211
- /* @__PURE__ */ jsxDEV("th", {
212
- className: "px-4 py-3 text-left font-medium text-muted-foreground text-sm",
213
- children: "Agent"
214
- }, undefined, false, undefined, this),
215
- /* @__PURE__ */ jsxDEV("th", {
216
- className: "px-4 py-3 text-left font-medium text-muted-foreground text-sm",
217
- children: "Status"
218
- }, undefined, false, undefined, this),
219
- /* @__PURE__ */ jsxDEV("th", {
220
- className: "px-4 py-3 text-right font-medium text-muted-foreground text-sm",
221
- children: "Tokens"
222
- }, undefined, false, undefined, this),
223
- /* @__PURE__ */ jsxDEV("th", {
224
- className: "px-4 py-3 text-right font-medium text-muted-foreground text-sm",
225
- children: "Duration"
226
- }, undefined, false, undefined, this),
227
- /* @__PURE__ */ jsxDEV("th", {
228
- className: "px-4 py-3 text-right font-medium text-muted-foreground text-sm",
229
- children: "Cost"
230
- }, undefined, false, undefined, this)
231
- ]
232
- }, undefined, true, undefined, this)
233
- }, undefined, false, undefined, this),
234
- /* @__PURE__ */ jsxDEV("tbody", {
235
- className: "divide-y divide-border",
236
- children: data.items.map((run) => /* @__PURE__ */ jsxDEV("tr", {
237
- className: "cursor-pointer transition-colors hover:bg-muted/50",
238
- onClick: () => onRunClick?.(run.id),
239
- children: [
240
- /* @__PURE__ */ jsxDEV("td", {
241
- className: "px-4 py-3",
242
- children: [
243
- /* @__PURE__ */ jsxDEV("div", {
244
- className: "font-mono text-sm",
245
- children: run.id.slice(-8)
246
- }, undefined, false, undefined, this),
247
- /* @__PURE__ */ jsxDEV("div", {
248
- className: "text-muted-foreground text-xs",
249
- children: run.queuedAt.toLocaleString()
250
- }, undefined, false, undefined, this)
251
- ]
252
- }, undefined, true, undefined, this),
253
- /* @__PURE__ */ jsxDEV("td", {
254
- className: "px-4 py-3",
255
- children: /* @__PURE__ */ jsxDEV("span", {
256
- className: "font-medium",
257
- children: run.agentName
258
- }, undefined, false, undefined, this)
259
- }, undefined, false, undefined, this),
260
- /* @__PURE__ */ jsxDEV("td", {
261
- className: "px-4 py-3",
262
- children: /* @__PURE__ */ jsxDEV(StatusChip, {
263
- tone: getStatusTone(run.status),
264
- label: run.status
265
- }, undefined, false, undefined, this)
266
- }, undefined, false, undefined, this),
267
- /* @__PURE__ */ jsxDEV("td", {
268
- className: "px-4 py-3 text-right font-mono text-sm",
269
- children: formatTokens(run.totalTokens)
270
- }, undefined, false, undefined, this),
271
- /* @__PURE__ */ jsxDEV("td", {
272
- className: "px-4 py-3 text-right font-mono text-sm",
273
- children: formatDuration(run.durationMs)
274
- }, undefined, false, undefined, this),
275
- /* @__PURE__ */ jsxDEV("td", {
276
- className: "px-4 py-3 text-right font-mono text-sm",
277
- children: formatCost(run.estimatedCostUsd)
278
- }, undefined, false, undefined, this)
279
- ]
280
- }, run.id, true, undefined, this))
281
- }, undefined, false, undefined, this)
282
- ]
283
- }, undefined, true, undefined, this)
284
- }, undefined, false, undefined, this),
285
- /* @__PURE__ */ jsxDEV("div", {
286
- className: "text-center text-muted-foreground text-sm",
287
- children: [
288
- "Showing ",
289
- data.items.length,
290
- " of ",
291
- data.total,
292
- " runs"
293
- ]
294
- }, undefined, true, undefined, this)
512
+ }, undefined, true, undefined, this) : null,
513
+ /* @__PURE__ */ jsxDEV4(RunDataTable, {
514
+ runs: data.items,
515
+ totalItems: data.total,
516
+ pageIndex: pagination.pageIndex,
517
+ pageSize: pagination.pageSize,
518
+ sorting,
519
+ loading,
520
+ onSortingChange: (nextSorting) => {
521
+ setSorting(nextSorting);
522
+ setPagination((current) => ({ ...current, pageIndex: 0 }));
523
+ },
524
+ onPaginationChange: setPagination,
525
+ onRunClick
526
+ }, undefined, false, undefined, this)
295
527
  ]
296
528
  }, undefined, true, undefined, this);
297
529
  }
298
530
 
299
531
  // src/ui/hooks/useToolList.ts
300
532
  import { useTemplateRuntime as useTemplateRuntime3 } from "@contractspec/lib.example-shared-ui";
301
- import { useCallback as useCallback3, useEffect as useEffect3, useMemo as useMemo2, useState as useState3 } from "react";
533
+ import { useCallback as useCallback3, useEffect as useEffect3, useMemo as useMemo3, useState as useState4 } from "react";
302
534
  function useToolList(options = {}) {
303
535
  const { handlers, projectId } = useTemplateRuntime3();
304
536
  const { agent } = handlers;
305
- const [data, setData] = useState3(null);
306
- const [loading, setLoading] = useState3(true);
307
- const [error, setError] = useState3(null);
308
- const [page, setPage] = useState3(1);
537
+ const [data, setData] = useState4(null);
538
+ const [loading, setLoading] = useState4(true);
539
+ const [error, setError] = useState4(null);
540
+ const [page, setPage] = useState4(1);
309
541
  const fetchData = useCallback3(async () => {
310
542
  setLoading(true);
311
543
  setError(null);
@@ -336,7 +568,7 @@ function useToolList(options = {}) {
336
568
  useEffect3(() => {
337
569
  fetchData();
338
570
  }, [fetchData]);
339
- const { stats, groupedByCategory, categoryStats } = useMemo2(() => {
571
+ const { stats, groupedByCategory, categoryStats } = useMemo3(() => {
340
572
  if (!data)
341
573
  return { stats: null, groupedByCategory: {}, categoryStats: [] };
342
574
  const items = data.items;
@@ -381,16 +613,16 @@ function useToolList(options = {}) {
381
613
 
382
614
  // src/ui/views/ToolRegistryView.tsx
383
615
  import {
384
- Button,
616
+ Button as Button2,
385
617
  EmptyState as EmptyState2,
386
618
  EntityCard,
387
619
  ErrorState as ErrorState2,
388
620
  LoaderBlock as LoaderBlock2,
389
621
  StatCard as StatCard2,
390
622
  StatCardGroup as StatCardGroup2,
391
- StatusChip as StatusChip2
623
+ StatusChip as StatusChip3
392
624
  } from "@contractspec/lib.design-system";
393
- import { jsxDEV as jsxDEV2 } from "react/jsx-dev-runtime";
625
+ import { jsxDEV as jsxDEV5 } from "react/jsx-dev-runtime";
394
626
  "use client";
395
627
  var categoryIcons = {
396
628
  RETRIEVAL: "\uD83D\uDD0D",
@@ -420,12 +652,12 @@ function ToolRegistryView({
420
652
  }) {
421
653
  const { data, loading, error, groupedByCategory, categoryStats, refetch } = useToolList();
422
654
  if (loading && !data) {
423
- return /* @__PURE__ */ jsxDEV2(LoaderBlock2, {
655
+ return /* @__PURE__ */ jsxDEV5(LoaderBlock2, {
424
656
  label: "Loading tools..."
425
657
  }, undefined, false, undefined, this);
426
658
  }
427
659
  if (error) {
428
- return /* @__PURE__ */ jsxDEV2(ErrorState2, {
660
+ return /* @__PURE__ */ jsxDEV5(ErrorState2, {
429
661
  title: "Failed to load tools",
430
662
  description: error.message,
431
663
  onRetry: refetch,
@@ -433,64 +665,64 @@ function ToolRegistryView({
433
665
  }, undefined, false, undefined, this);
434
666
  }
435
667
  if (!data?.items.length) {
436
- return /* @__PURE__ */ jsxDEV2(EmptyState2, {
668
+ return /* @__PURE__ */ jsxDEV5(EmptyState2, {
437
669
  title: "No tools registered",
438
670
  description: "Create your first tool to extend agent capabilities.",
439
- primaryAction: onCreateTool ? /* @__PURE__ */ jsxDEV2(Button, {
671
+ primaryAction: onCreateTool ? /* @__PURE__ */ jsxDEV5(Button2, {
440
672
  onPress: onCreateTool,
441
673
  children: "Create Tool"
442
674
  }, undefined, false, undefined, this) : undefined
443
675
  }, undefined, false, undefined, this);
444
676
  }
445
- return /* @__PURE__ */ jsxDEV2("div", {
677
+ return /* @__PURE__ */ jsxDEV5("div", {
446
678
  className: "space-y-8",
447
679
  children: [
448
- /* @__PURE__ */ jsxDEV2(StatCardGroup2, {
680
+ /* @__PURE__ */ jsxDEV5(StatCardGroup2, {
449
681
  children: [
450
- /* @__PURE__ */ jsxDEV2(StatCard2, {
682
+ /* @__PURE__ */ jsxDEV5(StatCard2, {
451
683
  label: "Total Tools",
452
684
  value: data.total
453
685
  }, undefined, false, undefined, this),
454
- categoryStats.slice(0, 3).map(({ category, count }) => /* @__PURE__ */ jsxDEV2(StatCard2, {
686
+ categoryStats.slice(0, 3).map(({ category, count }) => /* @__PURE__ */ jsxDEV5(StatCard2, {
455
687
  label: `${categoryIcons[category] ?? ""} ${category}`,
456
688
  value: count
457
689
  }, category, false, undefined, this))
458
690
  ]
459
691
  }, undefined, true, undefined, this),
460
- Object.entries(groupedByCategory).map(([category, tools]) => /* @__PURE__ */ jsxDEV2("section", {
692
+ Object.entries(groupedByCategory).map(([category, tools]) => /* @__PURE__ */ jsxDEV5("section", {
461
693
  className: "space-y-4",
462
694
  children: [
463
- /* @__PURE__ */ jsxDEV2("div", {
695
+ /* @__PURE__ */ jsxDEV5("div", {
464
696
  className: "flex items-center gap-2",
465
697
  children: [
466
- /* @__PURE__ */ jsxDEV2("span", {
698
+ /* @__PURE__ */ jsxDEV5("span", {
467
699
  className: "text-2xl",
468
700
  children: categoryIcons[category]
469
701
  }, undefined, false, undefined, this),
470
- /* @__PURE__ */ jsxDEV2("h3", {
702
+ /* @__PURE__ */ jsxDEV5("h3", {
471
703
  className: "font-semibold text-lg",
472
704
  children: category
473
705
  }, undefined, false, undefined, this),
474
- /* @__PURE__ */ jsxDEV2("span", {
706
+ /* @__PURE__ */ jsxDEV5("span", {
475
707
  className: "rounded-full bg-muted px-2 py-0.5 text-muted-foreground text-xs",
476
708
  children: tools.length
477
709
  }, undefined, false, undefined, this)
478
710
  ]
479
711
  }, undefined, true, undefined, this),
480
- /* @__PURE__ */ jsxDEV2("div", {
712
+ /* @__PURE__ */ jsxDEV5("div", {
481
713
  className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3",
482
- children: tools.map((tool) => /* @__PURE__ */ jsxDEV2(EntityCard, {
714
+ children: tools.map((tool) => /* @__PURE__ */ jsxDEV5(EntityCard, {
483
715
  cardTitle: tool.name,
484
716
  cardSubtitle: `v${tool.version}`,
485
- meta: /* @__PURE__ */ jsxDEV2("p", {
717
+ meta: /* @__PURE__ */ jsxDEV5("p", {
486
718
  className: "text-muted-foreground text-sm",
487
719
  children: tool.description
488
720
  }, undefined, false, undefined, this),
489
- chips: /* @__PURE__ */ jsxDEV2(StatusChip2, {
721
+ chips: /* @__PURE__ */ jsxDEV5(StatusChip3, {
490
722
  tone: getStatusTone2(tool.status),
491
723
  label: tool.status
492
724
  }, undefined, false, undefined, this),
493
- footer: /* @__PURE__ */ jsxDEV2("code", {
725
+ footer: /* @__PURE__ */ jsxDEV5("code", {
494
726
  className: "text-muted-foreground text-xs",
495
727
  children: tool.name
496
728
  }, undefined, false, undefined, this),
@@ -505,16 +737,16 @@ function ToolRegistryView({
505
737
 
506
738
  // src/ui/views/AgentListView.tsx
507
739
  import {
508
- Button as Button2,
740
+ Button as Button3,
509
741
  EmptyState as EmptyState3,
510
742
  EntityCard as EntityCard2,
511
743
  ErrorState as ErrorState3,
512
744
  LoaderBlock as LoaderBlock3,
513
745
  StatCard as StatCard3,
514
746
  StatCardGroup as StatCardGroup3,
515
- StatusChip as StatusChip3
747
+ StatusChip as StatusChip4
516
748
  } from "@contractspec/lib.design-system";
517
- import { jsxDEV as jsxDEV3 } from "react/jsx-dev-runtime";
749
+ import { jsxDEV as jsxDEV6 } from "react/jsx-dev-runtime";
518
750
  "use client";
519
751
  function getStatusTone3(status) {
520
752
  switch (status) {
@@ -532,12 +764,12 @@ function getStatusTone3(status) {
532
764
  function AgentListView() {
533
765
  const { data, loading, error, stats, refetch } = useAgentList();
534
766
  if (loading && !data) {
535
- return /* @__PURE__ */ jsxDEV3(LoaderBlock3, {
767
+ return /* @__PURE__ */ jsxDEV6(LoaderBlock3, {
536
768
  label: "Loading agents..."
537
769
  }, undefined, false, undefined, this);
538
770
  }
539
771
  if (error) {
540
- return /* @__PURE__ */ jsxDEV3(ErrorState3, {
772
+ return /* @__PURE__ */ jsxDEV6(ErrorState3, {
541
773
  title: "Failed to load agents",
542
774
  description: error.message,
543
775
  onRetry: refetch,
@@ -545,61 +777,61 @@ function AgentListView() {
545
777
  }, undefined, false, undefined, this);
546
778
  }
547
779
  if (!data?.items.length) {
548
- return /* @__PURE__ */ jsxDEV3(EmptyState3, {
780
+ return /* @__PURE__ */ jsxDEV6(EmptyState3, {
549
781
  title: "No agents yet",
550
782
  description: "Create your first AI agent to get started."
551
783
  }, undefined, false, undefined, this);
552
784
  }
553
- return /* @__PURE__ */ jsxDEV3("div", {
785
+ return /* @__PURE__ */ jsxDEV6("div", {
554
786
  className: "space-y-6",
555
787
  children: [
556
- stats && /* @__PURE__ */ jsxDEV3(StatCardGroup3, {
788
+ stats && /* @__PURE__ */ jsxDEV6(StatCardGroup3, {
557
789
  children: [
558
- /* @__PURE__ */ jsxDEV3(StatCard3, {
790
+ /* @__PURE__ */ jsxDEV6(StatCard3, {
559
791
  label: "Total Agents",
560
792
  value: stats.total
561
793
  }, undefined, false, undefined, this),
562
- /* @__PURE__ */ jsxDEV3(StatCard3, {
794
+ /* @__PURE__ */ jsxDEV6(StatCard3, {
563
795
  label: "Active",
564
796
  value: stats.active
565
797
  }, undefined, false, undefined, this),
566
- /* @__PURE__ */ jsxDEV3(StatCard3, {
798
+ /* @__PURE__ */ jsxDEV6(StatCard3, {
567
799
  label: "Paused",
568
800
  value: stats.paused
569
801
  }, undefined, false, undefined, this),
570
- /* @__PURE__ */ jsxDEV3(StatCard3, {
802
+ /* @__PURE__ */ jsxDEV6(StatCard3, {
571
803
  label: "Draft",
572
804
  value: stats.draft
573
805
  }, undefined, false, undefined, this)
574
806
  ]
575
807
  }, undefined, true, undefined, this),
576
- /* @__PURE__ */ jsxDEV3("div", {
808
+ /* @__PURE__ */ jsxDEV6("div", {
577
809
  className: "flex items-center justify-between",
578
810
  children: [
579
- /* @__PURE__ */ jsxDEV3("h3", {
811
+ /* @__PURE__ */ jsxDEV6("h3", {
580
812
  className: "font-semibold text-lg",
581
813
  children: "Agents"
582
814
  }, undefined, false, undefined, this),
583
- /* @__PURE__ */ jsxDEV3(Button2, {
815
+ /* @__PURE__ */ jsxDEV6(Button3, {
584
816
  onPress: () => alert("Create Agent clicked!"),
585
817
  children: "Create Agent"
586
818
  }, undefined, false, undefined, this)
587
819
  ]
588
820
  }, undefined, true, undefined, this),
589
- /* @__PURE__ */ jsxDEV3("div", {
821
+ /* @__PURE__ */ jsxDEV6("div", {
590
822
  className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-3",
591
- children: data.items.map((agent) => /* @__PURE__ */ jsxDEV3(EntityCard2, {
823
+ children: data.items.map((agent) => /* @__PURE__ */ jsxDEV6(EntityCard2, {
592
824
  cardTitle: agent.name,
593
825
  cardSubtitle: agent.modelName,
594
- meta: /* @__PURE__ */ jsxDEV3("p", {
826
+ meta: /* @__PURE__ */ jsxDEV6("p", {
595
827
  className: "text-muted-foreground text-sm",
596
828
  children: agent.description
597
829
  }, undefined, false, undefined, this),
598
- chips: /* @__PURE__ */ jsxDEV3(StatusChip3, {
830
+ chips: /* @__PURE__ */ jsxDEV6(StatusChip4, {
599
831
  tone: getStatusTone3(agent.status),
600
832
  label: agent.status
601
833
  }, undefined, false, undefined, this),
602
- footer: /* @__PURE__ */ jsxDEV3("span", {
834
+ footer: /* @__PURE__ */ jsxDEV6("span", {
603
835
  className: "text-muted-foreground text-xs",
604
836
  children: [
605
837
  "Created ",