@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
@@ -0,0 +1,327 @@
1
+ // @bun
2
+ // src/ui/views/run-list.shared.tsx
3
+ import { Button, StatusChip } from "@contractspec/lib.design-system";
4
+ import { HStack, VStack } from "@contractspec/lib.ui-kit-web/ui/stack";
5
+ import { Text } from "@contractspec/lib.ui-kit-web/ui/text";
6
+ import { jsxDEV } from "react/jsx-dev-runtime";
7
+ "use client";
8
+ function getStatusTone(status) {
9
+ switch (status) {
10
+ case "COMPLETED":
11
+ return "success";
12
+ case "RUNNING":
13
+ return "warning";
14
+ case "QUEUED":
15
+ return "neutral";
16
+ case "FAILED":
17
+ case "CANCELLED":
18
+ return "danger";
19
+ default:
20
+ return "neutral";
21
+ }
22
+ }
23
+ function formatDuration(ms) {
24
+ if (!ms)
25
+ return "-";
26
+ if (ms < 1000)
27
+ return `${ms}ms`;
28
+ if (ms < 60000)
29
+ return `${(ms / 1000).toFixed(1)}s`;
30
+ return `${(ms / 60000).toFixed(1)}m`;
31
+ }
32
+ function formatTokens(tokens) {
33
+ if (tokens < 1000)
34
+ return tokens.toString();
35
+ if (tokens < 1e6)
36
+ return `${(tokens / 1000).toFixed(1)}K`;
37
+ return `${(tokens / 1e6).toFixed(2)}M`;
38
+ }
39
+ function formatCost(cost) {
40
+ if (!cost)
41
+ return "-";
42
+ return `$${cost.toFixed(4)}`;
43
+ }
44
+ function formatJson(value) {
45
+ return JSON.stringify(value ?? null, null, 2);
46
+ }
47
+ function RunExpandedContent({ run }) {
48
+ return /* @__PURE__ */ jsxDEV(VStack, {
49
+ gap: "sm",
50
+ className: "py-2",
51
+ children: [
52
+ /* @__PURE__ */ jsxDEV(HStack, {
53
+ justify: "between",
54
+ className: "flex-wrap",
55
+ children: [
56
+ /* @__PURE__ */ jsxDEV(StatusChip, {
57
+ tone: getStatusTone(run.status),
58
+ label: run.status
59
+ }, undefined, false, undefined, this),
60
+ /* @__PURE__ */ jsxDEV(Text, {
61
+ className: "text-muted-foreground text-sm",
62
+ children: [
63
+ "Queued ",
64
+ run.queuedAt.toLocaleString()
65
+ ]
66
+ }, undefined, true, undefined, this)
67
+ ]
68
+ }, undefined, true, undefined, this),
69
+ /* @__PURE__ */ jsxDEV(HStack, {
70
+ gap: "lg",
71
+ className: "flex-wrap",
72
+ children: [
73
+ /* @__PURE__ */ jsxDEV(Text, {
74
+ className: "text-muted-foreground text-sm",
75
+ children: [
76
+ "Prompt ",
77
+ formatTokens(run.promptTokens)
78
+ ]
79
+ }, undefined, true, undefined, this),
80
+ /* @__PURE__ */ jsxDEV(Text, {
81
+ className: "text-muted-foreground text-sm",
82
+ children: [
83
+ "Completion ",
84
+ formatTokens(run.completionTokens)
85
+ ]
86
+ }, undefined, true, undefined, this),
87
+ /* @__PURE__ */ jsxDEV(Text, {
88
+ className: "text-muted-foreground text-sm",
89
+ children: [
90
+ "Duration ",
91
+ formatDuration(run.durationMs)
92
+ ]
93
+ }, undefined, true, undefined, this)
94
+ ]
95
+ }, undefined, true, undefined, this),
96
+ /* @__PURE__ */ jsxDEV(VStack, {
97
+ gap: "xs",
98
+ children: [
99
+ /* @__PURE__ */ jsxDEV(Text, {
100
+ className: "font-medium text-sm",
101
+ children: "Input"
102
+ }, undefined, false, undefined, this),
103
+ /* @__PURE__ */ jsxDEV("pre", {
104
+ className: "overflow-auto rounded-md bg-muted/40 p-3 text-xs",
105
+ children: formatJson(run.input)
106
+ }, undefined, false, undefined, this)
107
+ ]
108
+ }, undefined, true, undefined, this),
109
+ /* @__PURE__ */ jsxDEV(VStack, {
110
+ gap: "xs",
111
+ children: [
112
+ /* @__PURE__ */ jsxDEV(Text, {
113
+ className: "font-medium text-sm",
114
+ children: "Output"
115
+ }, undefined, false, undefined, this),
116
+ /* @__PURE__ */ jsxDEV("pre", {
117
+ className: "overflow-auto rounded-md bg-muted/40 p-3 text-xs",
118
+ children: formatJson(run.output ?? run.errorMessage ?? "Pending")
119
+ }, undefined, false, undefined, this)
120
+ ]
121
+ }, undefined, true, undefined, this)
122
+ ]
123
+ }, undefined, true, undefined, this);
124
+ }
125
+ function RunTableToolbar({
126
+ controller,
127
+ totalRuns
128
+ }) {
129
+ const firstRow = controller.rows[0];
130
+ const queuedColumn = controller.columns.find((column) => column.id === "queuedAt");
131
+ const durationColumn = controller.columns.find((column) => column.id === "durationMs");
132
+ const costColumn = controller.columns.find((column) => column.id === "estimatedCostUsd");
133
+ return /* @__PURE__ */ jsxDEV(HStack, {
134
+ gap: "sm",
135
+ className: "flex-wrap",
136
+ children: [
137
+ /* @__PURE__ */ jsxDEV(Text, {
138
+ className: "text-muted-foreground text-sm",
139
+ children: [
140
+ totalRuns,
141
+ " runs"
142
+ ]
143
+ }, undefined, true, undefined, this),
144
+ /* @__PURE__ */ jsxDEV(Button, {
145
+ variant: "outline",
146
+ size: "sm",
147
+ onPress: () => firstRow?.toggleExpanded?.(!firstRow?.isExpanded),
148
+ children: "Expand Latest Run"
149
+ }, undefined, false, undefined, this),
150
+ /* @__PURE__ */ jsxDEV(Button, {
151
+ variant: "outline",
152
+ size: "sm",
153
+ onPress: () => queuedColumn?.toggleVisibility?.(!queuedColumn?.visible),
154
+ children: queuedColumn?.visible ? "Hide Time" : "Show Time"
155
+ }, undefined, false, undefined, this),
156
+ /* @__PURE__ */ jsxDEV(Button, {
157
+ variant: "outline",
158
+ size: "sm",
159
+ onPress: () => durationColumn?.toggleVisibility?.(!durationColumn?.visible),
160
+ children: durationColumn?.visible ? "Hide Duration" : "Show Duration"
161
+ }, undefined, false, undefined, this),
162
+ /* @__PURE__ */ jsxDEV(Button, {
163
+ variant: "outline",
164
+ size: "sm",
165
+ onPress: () => costColumn?.toggleVisibility?.(!costColumn?.visible),
166
+ children: costColumn?.visible ? "Hide Cost" : "Show Cost"
167
+ }, undefined, false, undefined, this)
168
+ ]
169
+ }, undefined, true, undefined, this);
170
+ }
171
+
172
+ // src/ui/views/run-data-table.columns.tsx
173
+ import { StatusChip as StatusChip2 } from "@contractspec/lib.design-system";
174
+ import { VStack as VStack2 } from "@contractspec/lib.ui-kit-web/ui/stack";
175
+ import { Text as Text2 } from "@contractspec/lib.ui-kit-web/ui/text";
176
+ import { jsxDEV as jsxDEV2 } from "react/jsx-dev-runtime";
177
+ "use client";
178
+ function createRunTableColumns() {
179
+ return [
180
+ {
181
+ id: "queuedAt",
182
+ header: "Run",
183
+ label: "Run",
184
+ accessor: (run) => run.queuedAt.getTime(),
185
+ cell: ({ item }) => /* @__PURE__ */ jsxDEV2(VStack2, {
186
+ gap: "xs",
187
+ children: [
188
+ /* @__PURE__ */ jsxDEV2(Text2, {
189
+ className: "font-mono text-sm",
190
+ children: item.id.slice(-8)
191
+ }, undefined, false, undefined, this),
192
+ /* @__PURE__ */ jsxDEV2(Text2, {
193
+ className: "text-muted-foreground text-xs",
194
+ children: item.queuedAt.toLocaleString()
195
+ }, undefined, false, undefined, this)
196
+ ]
197
+ }, undefined, true, undefined, this),
198
+ size: 220,
199
+ minSize: 180,
200
+ canSort: true,
201
+ canHide: true,
202
+ canResize: true
203
+ },
204
+ {
205
+ id: "agentName",
206
+ header: "Agent",
207
+ label: "Agent",
208
+ accessor: (run) => run.agentName ?? "Unknown Agent",
209
+ cell: ({ value }) => /* @__PURE__ */ jsxDEV2(Text2, {
210
+ className: "font-medium",
211
+ children: typeof value === "string" ? value : "Unknown Agent"
212
+ }, undefined, false, undefined, this),
213
+ size: 220,
214
+ canSort: true,
215
+ canResize: true
216
+ },
217
+ {
218
+ id: "status",
219
+ header: "Status",
220
+ label: "Status",
221
+ accessorKey: "status",
222
+ cell: ({ value }) => {
223
+ const status = typeof value === "string" ? value : "QUEUED";
224
+ return /* @__PURE__ */ jsxDEV2(StatusChip2, {
225
+ tone: getStatusTone(status),
226
+ label: status
227
+ }, undefined, false, undefined, this);
228
+ },
229
+ size: 150,
230
+ canSort: true,
231
+ canResize: true
232
+ },
233
+ {
234
+ id: "totalTokens",
235
+ header: "Tokens",
236
+ label: "Tokens",
237
+ accessorKey: "totalTokens",
238
+ cell: ({ value }) => formatTokens(Number(value ?? 0)),
239
+ align: "right",
240
+ size: 140,
241
+ canSort: true,
242
+ canResize: true
243
+ },
244
+ {
245
+ id: "durationMs",
246
+ header: "Duration",
247
+ label: "Duration",
248
+ accessorKey: "durationMs",
249
+ cell: ({ value }) => formatDuration(typeof value === "number" ? value : undefined),
250
+ align: "right",
251
+ size: 140,
252
+ canSort: true,
253
+ canHide: true,
254
+ canResize: true
255
+ },
256
+ {
257
+ id: "estimatedCostUsd",
258
+ header: "Cost",
259
+ label: "Cost",
260
+ accessorKey: "estimatedCostUsd",
261
+ cell: ({ value }) => formatCost(typeof value === "number" ? value : undefined),
262
+ align: "right",
263
+ size: 140,
264
+ canSort: true,
265
+ canHide: true,
266
+ canResize: true
267
+ }
268
+ ];
269
+ }
270
+
271
+ // src/ui/views/RunDataTable.tsx
272
+ import { DataTable } from "@contractspec/lib.design-system";
273
+ import { useContractTable } from "@contractspec/lib.presentation-runtime-react";
274
+ import * as React from "react";
275
+ import { jsxDEV as jsxDEV3 } from "react/jsx-dev-runtime";
276
+ "use client";
277
+ function RunDataTable({
278
+ runs,
279
+ totalItems,
280
+ pageIndex,
281
+ pageSize,
282
+ sorting,
283
+ loading,
284
+ onSortingChange,
285
+ onPaginationChange,
286
+ onRunClick
287
+ }) {
288
+ const columns = React.useMemo(() => createRunTableColumns(), []);
289
+ const controller = useContractTable({
290
+ data: runs,
291
+ columns,
292
+ executionMode: "server",
293
+ totalItems,
294
+ state: {
295
+ sorting,
296
+ pagination: { pageIndex, pageSize }
297
+ },
298
+ onSortingChange,
299
+ onPaginationChange,
300
+ initialState: {
301
+ columnVisibility: { estimatedCostUsd: false }
302
+ },
303
+ getRowId: (run) => run.id,
304
+ renderExpandedContent: (run) => /* @__PURE__ */ jsxDEV3(RunExpandedContent, {
305
+ run
306
+ }, undefined, false, undefined, this),
307
+ getCanExpand: () => true
308
+ });
309
+ return /* @__PURE__ */ jsxDEV3(DataTable, {
310
+ controller,
311
+ title: "Run History",
312
+ description: "Server-mode ContractSpec table with shared pagination, sorting, visibility, and expansion.",
313
+ loading,
314
+ onRowPress: (row) => onRunClick?.(row.id),
315
+ toolbar: /* @__PURE__ */ jsxDEV3(RunTableToolbar, {
316
+ controller,
317
+ totalRuns: totalItems
318
+ }, undefined, false, undefined, this),
319
+ emptyState: /* @__PURE__ */ jsxDEV3("div", {
320
+ className: "rounded-md border border-dashed p-8 text-center text-muted-foreground text-sm",
321
+ children: "No runs yet"
322
+ }, undefined, false, undefined, this)
323
+ }, undefined, false, undefined, this);
324
+ }
325
+ export {
326
+ RunDataTable
327
+ };