@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
|
@@ -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 [
|
|
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
|
-
|
|
75
|
-
|
|
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
|
-
}, [
|
|
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: () =>
|
|
103
|
-
prevPage:
|
|
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/
|
|
108
|
-
import {
|
|
109
|
-
|
|
110
|
-
|
|
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
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
490
|
+
return /* @__PURE__ */ jsxDEV4("div", {
|
|
176
491
|
className: "space-y-6",
|
|
177
492
|
children: [
|
|
178
|
-
metrics
|
|
493
|
+
metrics ? /* @__PURE__ */ jsxDEV4(StatCardGroup, {
|
|
179
494
|
children: [
|
|
180
|
-
/* @__PURE__ */
|
|
495
|
+
/* @__PURE__ */ jsxDEV4(StatCard, {
|
|
181
496
|
label: "Total Runs",
|
|
182
497
|
value: metrics.totalRuns
|
|
183
498
|
}, undefined, false, undefined, this),
|
|
184
|
-
/* @__PURE__ */
|
|
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__ */
|
|
503
|
+
/* @__PURE__ */ jsxDEV4(StatCard, {
|
|
189
504
|
label: "Total Tokens",
|
|
190
505
|
value: formatTokens(metrics.totalTokens)
|
|
191
506
|
}, undefined, false, undefined, this),
|
|
192
|
-
/* @__PURE__ */
|
|
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__ */
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
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
|
|
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] =
|
|
306
|
-
const [loading, setLoading] =
|
|
307
|
-
const [error, setError] =
|
|
308
|
-
const [page, setPage] =
|
|
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 } =
|
|
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
|
|
623
|
+
StatusChip as StatusChip3
|
|
392
624
|
} from "@contractspec/lib.design-system";
|
|
393
|
-
import { jsxDEV as
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
677
|
+
return /* @__PURE__ */ jsxDEV5("div", {
|
|
446
678
|
className: "space-y-8",
|
|
447
679
|
children: [
|
|
448
|
-
/* @__PURE__ */
|
|
680
|
+
/* @__PURE__ */ jsxDEV5(StatCardGroup2, {
|
|
449
681
|
children: [
|
|
450
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
692
|
+
Object.entries(groupedByCategory).map(([category, tools]) => /* @__PURE__ */ jsxDEV5("section", {
|
|
461
693
|
className: "space-y-4",
|
|
462
694
|
children: [
|
|
463
|
-
/* @__PURE__ */
|
|
695
|
+
/* @__PURE__ */ jsxDEV5("div", {
|
|
464
696
|
className: "flex items-center gap-2",
|
|
465
697
|
children: [
|
|
466
|
-
/* @__PURE__ */
|
|
698
|
+
/* @__PURE__ */ jsxDEV5("span", {
|
|
467
699
|
className: "text-2xl",
|
|
468
700
|
children: categoryIcons[category]
|
|
469
701
|
}, undefined, false, undefined, this),
|
|
470
|
-
/* @__PURE__ */
|
|
702
|
+
/* @__PURE__ */ jsxDEV5("h3", {
|
|
471
703
|
className: "font-semibold text-lg",
|
|
472
704
|
children: category
|
|
473
705
|
}, undefined, false, undefined, this),
|
|
474
|
-
/* @__PURE__ */
|
|
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__ */
|
|
712
|
+
/* @__PURE__ */ jsxDEV5("div", {
|
|
481
713
|
className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3",
|
|
482
|
-
children: tools.map((tool) => /* @__PURE__ */
|
|
714
|
+
children: tools.map((tool) => /* @__PURE__ */ jsxDEV5(EntityCard, {
|
|
483
715
|
cardTitle: tool.name,
|
|
484
716
|
cardSubtitle: `v${tool.version}`,
|
|
485
|
-
meta: /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
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
|
|
747
|
+
StatusChip as StatusChip4
|
|
516
748
|
} from "@contractspec/lib.design-system";
|
|
517
|
-
import { jsxDEV as
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
785
|
+
return /* @__PURE__ */ jsxDEV6("div", {
|
|
554
786
|
className: "space-y-6",
|
|
555
787
|
children: [
|
|
556
|
-
stats && /* @__PURE__ */
|
|
788
|
+
stats && /* @__PURE__ */ jsxDEV6(StatCardGroup3, {
|
|
557
789
|
children: [
|
|
558
|
-
/* @__PURE__ */
|
|
790
|
+
/* @__PURE__ */ jsxDEV6(StatCard3, {
|
|
559
791
|
label: "Total Agents",
|
|
560
792
|
value: stats.total
|
|
561
793
|
}, undefined, false, undefined, this),
|
|
562
|
-
/* @__PURE__ */
|
|
794
|
+
/* @__PURE__ */ jsxDEV6(StatCard3, {
|
|
563
795
|
label: "Active",
|
|
564
796
|
value: stats.active
|
|
565
797
|
}, undefined, false, undefined, this),
|
|
566
|
-
/* @__PURE__ */
|
|
798
|
+
/* @__PURE__ */ jsxDEV6(StatCard3, {
|
|
567
799
|
label: "Paused",
|
|
568
800
|
value: stats.paused
|
|
569
801
|
}, undefined, false, undefined, this),
|
|
570
|
-
/* @__PURE__ */
|
|
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__ */
|
|
808
|
+
/* @__PURE__ */ jsxDEV6("div", {
|
|
577
809
|
className: "flex items-center justify-between",
|
|
578
810
|
children: [
|
|
579
|
-
/* @__PURE__ */
|
|
811
|
+
/* @__PURE__ */ jsxDEV6("h3", {
|
|
580
812
|
className: "font-semibold text-lg",
|
|
581
813
|
children: "Agents"
|
|
582
814
|
}, undefined, false, undefined, this),
|
|
583
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
823
|
+
children: data.items.map((agent) => /* @__PURE__ */ jsxDEV6(EntityCard2, {
|
|
592
824
|
cardTitle: agent.name,
|
|
593
825
|
cardSubtitle: agent.modelName,
|
|
594
|
-
meta: /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
834
|
+
footer: /* @__PURE__ */ jsxDEV6("span", {
|
|
603
835
|
className: "text-muted-foreground text-xs",
|
|
604
836
|
children: [
|
|
605
837
|
"Created ",
|