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