@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
|
@@ -1,15 +1,24 @@
|
|
|
1
1
|
// src/ui/renderers/agent-list.markdown.ts
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
AGENT_CONSOLE_DEMO_ORGANIZATION_ID,
|
|
4
|
+
AGENT_CONSOLE_DEMO_PROJECT_ID,
|
|
5
|
+
createAgentConsoleDemoHandlers
|
|
6
|
+
} from "@contractspec/example.agent-console/shared";
|
|
5
7
|
var agentListMarkdownRenderer = {
|
|
6
8
|
target: "markdown",
|
|
7
|
-
render: async (desc) => {
|
|
9
|
+
render: async (desc, ctx) => {
|
|
8
10
|
if (desc.source.type !== "component" || desc.source.componentKey !== "AgentListView") {
|
|
9
11
|
throw new Error("agentListMarkdownRenderer: not AgentListView");
|
|
10
12
|
}
|
|
11
|
-
const data =
|
|
12
|
-
|
|
13
|
+
const data = Array.isArray(ctx?.data) ? {
|
|
14
|
+
items: ctx.data,
|
|
15
|
+
total: ctx.data.length,
|
|
16
|
+
hasMore: false
|
|
17
|
+
} : await createAgentConsoleDemoHandlers({
|
|
18
|
+
projectId: AGENT_CONSOLE_DEMO_PROJECT_ID
|
|
19
|
+
}).listAgents({
|
|
20
|
+
projectId: AGENT_CONSOLE_DEMO_PROJECT_ID,
|
|
21
|
+
organizationId: AGENT_CONSOLE_DEMO_ORGANIZATION_ID,
|
|
13
22
|
limit: 50,
|
|
14
23
|
offset: 0
|
|
15
24
|
});
|
|
@@ -1,9 +1,185 @@
|
|
|
1
|
+
// src/visualizations/catalog.ts
|
|
2
|
+
import {
|
|
3
|
+
defineVisualization,
|
|
4
|
+
VisualizationRegistry
|
|
5
|
+
} from "@contractspec/lib.contracts-spec/visualizations";
|
|
6
|
+
var RUN_LIST_REF = { key: "agent.run.list", version: "1.0.0" };
|
|
7
|
+
var META = {
|
|
8
|
+
version: "1.0.0",
|
|
9
|
+
domain: "ai-ops",
|
|
10
|
+
stability: "experimental",
|
|
11
|
+
owners: ["@example.agent-console"],
|
|
12
|
+
tags: ["agent-console", "visualization", "operations"]
|
|
13
|
+
};
|
|
14
|
+
var AgentRunStatusVisualization = defineVisualization({
|
|
15
|
+
meta: {
|
|
16
|
+
...META,
|
|
17
|
+
key: "agent-console.visualization.run-status",
|
|
18
|
+
title: "Run Status Breakdown",
|
|
19
|
+
description: "Distribution of run outcomes across the current sample.",
|
|
20
|
+
goal: "Make operational success and failure mix visible at a glance.",
|
|
21
|
+
context: "Agent operations overview."
|
|
22
|
+
},
|
|
23
|
+
source: { primary: RUN_LIST_REF, resultPath: "data" },
|
|
24
|
+
visualization: {
|
|
25
|
+
kind: "pie",
|
|
26
|
+
nameDimension: "status",
|
|
27
|
+
valueMeasure: "runs",
|
|
28
|
+
dimensions: [
|
|
29
|
+
{ key: "status", label: "Status", dataPath: "status", type: "category" }
|
|
30
|
+
],
|
|
31
|
+
measures: [
|
|
32
|
+
{ key: "runs", label: "Runs", dataPath: "runs", format: "number" }
|
|
33
|
+
],
|
|
34
|
+
table: { caption: "Run counts by status." }
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
var AgentRunActivityVisualization = defineVisualization({
|
|
38
|
+
meta: {
|
|
39
|
+
...META,
|
|
40
|
+
key: "agent-console.visualization.run-activity",
|
|
41
|
+
title: "Recent Run Activity",
|
|
42
|
+
description: "Daily run volume across the current sample.",
|
|
43
|
+
goal: "Show whether agent activity is rising or slowing down.",
|
|
44
|
+
context: "Operations trend monitoring."
|
|
45
|
+
},
|
|
46
|
+
source: { primary: RUN_LIST_REF, resultPath: "data" },
|
|
47
|
+
visualization: {
|
|
48
|
+
kind: "cartesian",
|
|
49
|
+
variant: "line",
|
|
50
|
+
xDimension: "day",
|
|
51
|
+
yMeasures: ["runs"],
|
|
52
|
+
dimensions: [{ key: "day", label: "Day", dataPath: "day", type: "time" }],
|
|
53
|
+
measures: [
|
|
54
|
+
{
|
|
55
|
+
key: "runs",
|
|
56
|
+
label: "Runs",
|
|
57
|
+
dataPath: "runs",
|
|
58
|
+
format: "number",
|
|
59
|
+
color: "#0f766e"
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
table: { caption: "Daily run counts." }
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
var AgentRunEfficiencyVisualization = defineVisualization({
|
|
66
|
+
meta: {
|
|
67
|
+
...META,
|
|
68
|
+
key: "agent-console.visualization.run-efficiency",
|
|
69
|
+
title: "Duration vs Tokens",
|
|
70
|
+
description: "Scatter chart comparing token consumption and runtime.",
|
|
71
|
+
goal: "Reveal outlier runs that are slow relative to their token usage.",
|
|
72
|
+
context: "Operational performance diagnostics."
|
|
73
|
+
},
|
|
74
|
+
source: { primary: RUN_LIST_REF, resultPath: "data" },
|
|
75
|
+
visualization: {
|
|
76
|
+
kind: "cartesian",
|
|
77
|
+
variant: "scatter",
|
|
78
|
+
xDimension: "totalTokens",
|
|
79
|
+
yMeasures: ["durationMs"],
|
|
80
|
+
dimensions: [
|
|
81
|
+
{
|
|
82
|
+
key: "totalTokens",
|
|
83
|
+
label: "Total Tokens",
|
|
84
|
+
dataPath: "totalTokens",
|
|
85
|
+
type: "number"
|
|
86
|
+
}
|
|
87
|
+
],
|
|
88
|
+
measures: [
|
|
89
|
+
{
|
|
90
|
+
key: "durationMs",
|
|
91
|
+
label: "Duration",
|
|
92
|
+
dataPath: "durationMs",
|
|
93
|
+
format: "duration",
|
|
94
|
+
color: "#7c3aed"
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
key: "estimatedCostUsd",
|
|
98
|
+
label: "Cost",
|
|
99
|
+
dataPath: "estimatedCostUsd",
|
|
100
|
+
format: "currency"
|
|
101
|
+
}
|
|
102
|
+
],
|
|
103
|
+
series: [
|
|
104
|
+
{
|
|
105
|
+
key: "runs",
|
|
106
|
+
label: "Runs",
|
|
107
|
+
measure: "durationMs",
|
|
108
|
+
type: "scatter",
|
|
109
|
+
color: "#7c3aed"
|
|
110
|
+
}
|
|
111
|
+
],
|
|
112
|
+
table: { caption: "Run duration versus token usage." }
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
var AgentVisualizationSpecs = [
|
|
116
|
+
AgentRunStatusVisualization,
|
|
117
|
+
AgentRunActivityVisualization,
|
|
118
|
+
AgentRunEfficiencyVisualization
|
|
119
|
+
];
|
|
120
|
+
var AgentVisualizationRegistry = new VisualizationRegistry([
|
|
121
|
+
...AgentVisualizationSpecs
|
|
122
|
+
]);
|
|
123
|
+
var AgentVisualizationRefs = AgentVisualizationSpecs.map((spec) => ({
|
|
124
|
+
key: spec.meta.key,
|
|
125
|
+
version: spec.meta.version
|
|
126
|
+
}));
|
|
127
|
+
|
|
128
|
+
// src/visualizations/selectors.ts
|
|
129
|
+
function dayKey(value) {
|
|
130
|
+
if (!value)
|
|
131
|
+
return "unknown";
|
|
132
|
+
return value.toISOString().slice(0, 10);
|
|
133
|
+
}
|
|
134
|
+
function createAgentVisualizationItems(runs) {
|
|
135
|
+
const statusCounts = new Map;
|
|
136
|
+
const activityCounts = new Map;
|
|
137
|
+
for (const run of runs) {
|
|
138
|
+
statusCounts.set(run.status, (statusCounts.get(run.status) ?? 0) + 1);
|
|
139
|
+
activityCounts.set(dayKey(run.startedAt ?? run.queuedAt), (activityCounts.get(dayKey(run.startedAt ?? run.queuedAt)) ?? 0) + 1);
|
|
140
|
+
}
|
|
141
|
+
return [
|
|
142
|
+
{
|
|
143
|
+
key: "run-status",
|
|
144
|
+
spec: AgentRunStatusVisualization,
|
|
145
|
+
data: {
|
|
146
|
+
data: Array.from(statusCounts.entries()).map(([status, count]) => ({
|
|
147
|
+
status,
|
|
148
|
+
runs: count
|
|
149
|
+
}))
|
|
150
|
+
},
|
|
151
|
+
title: "Run Status Breakdown",
|
|
152
|
+
description: "Completed, failed, running, and cancelled runs in the sample.",
|
|
153
|
+
height: 260
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
key: "run-activity",
|
|
157
|
+
spec: AgentRunActivityVisualization,
|
|
158
|
+
data: {
|
|
159
|
+
data: Array.from(activityCounts.entries()).sort(([left], [right]) => left.localeCompare(right)).map(([day, count]) => ({ day, runs: count }))
|
|
160
|
+
},
|
|
161
|
+
title: "Recent Run Activity",
|
|
162
|
+
description: "Daily run volume derived from run start times."
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
key: "run-efficiency",
|
|
166
|
+
spec: AgentRunEfficiencyVisualization,
|
|
167
|
+
data: {
|
|
168
|
+
data: runs.filter((run) => typeof run.durationMs === "number").map((run) => ({
|
|
169
|
+
totalTokens: run.totalTokens,
|
|
170
|
+
durationMs: run.durationMs ?? 0,
|
|
171
|
+
estimatedCostUsd: run.estimatedCostUsd
|
|
172
|
+
}))
|
|
173
|
+
},
|
|
174
|
+
title: "Duration vs Tokens",
|
|
175
|
+
description: "Operational scatter plot for spotting inefficient runs."
|
|
176
|
+
}
|
|
177
|
+
];
|
|
178
|
+
}
|
|
1
179
|
// src/ui/renderers/dashboard.markdown.ts
|
|
2
180
|
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
mockListToolsHandler
|
|
6
|
-
} from "@contractspec/example.agent-console/handlers";
|
|
181
|
+
getFallbackAgentConsoleDashboardData
|
|
182
|
+
} from "@contractspec/example.agent-console/shared";
|
|
7
183
|
function formatDuration(ms) {
|
|
8
184
|
if (ms < 1000)
|
|
9
185
|
return `${ms}ms`;
|
|
@@ -13,29 +189,18 @@ function formatDuration(ms) {
|
|
|
13
189
|
}
|
|
14
190
|
var agentDashboardMarkdownRenderer = {
|
|
15
191
|
target: "markdown",
|
|
16
|
-
render: async (desc) => {
|
|
192
|
+
render: async (desc, ctx) => {
|
|
17
193
|
if (desc.source.type !== "component" || desc.source.componentKey !== "AgentConsoleDashboard") {
|
|
18
194
|
throw new Error("agentDashboardMarkdownRenderer: not AgentConsoleDashboard");
|
|
19
195
|
}
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
mockListToolsHandler({
|
|
29
|
-
organizationId: "demo-org",
|
|
30
|
-
limit: 100
|
|
31
|
-
})
|
|
32
|
-
]);
|
|
33
|
-
const activeAgents = agentsData.items.filter((a) => a.status === "ACTIVE").length;
|
|
34
|
-
const completedRuns = runsData.items.filter((r) => r.status === "COMPLETED").length;
|
|
35
|
-
const failedRuns = runsData.items.filter((r) => r.status === "FAILED").length;
|
|
36
|
-
const totalTokens = runsData.items.reduce((sum, r) => sum + (r.totalTokens ?? 0), 0);
|
|
37
|
-
const totalCost = runsData.items.reduce((sum, r) => sum + (r.estimatedCostUsd ?? 0), 0);
|
|
38
|
-
const activeTools = toolsData.items.filter((t) => t.status === "ACTIVE").length;
|
|
196
|
+
const data = ctx?.data ?? await getFallbackAgentConsoleDashboardData();
|
|
197
|
+
const activeAgents = data.agents.filter((a) => a.status === "ACTIVE").length;
|
|
198
|
+
const completedRuns = data.runs.filter((r) => r.status === "COMPLETED").length;
|
|
199
|
+
const failedRuns = data.runs.filter((r) => r.status === "FAILED").length;
|
|
200
|
+
const totalTokens = data.runs.reduce((sum, r) => sum + (r.totalTokens ?? 0), 0);
|
|
201
|
+
const totalCost = data.runs.reduce((sum, r) => sum + (r.estimatedCostUsd ?? 0), 0);
|
|
202
|
+
const activeTools = data.tools.filter((t) => t.status === "ACTIVE").length;
|
|
203
|
+
const visualizationItems = createAgentVisualizationItems(data.runs);
|
|
39
204
|
const lines = [
|
|
40
205
|
"# Agent Console Dashboard",
|
|
41
206
|
"",
|
|
@@ -45,51 +210,57 @@ var agentDashboardMarkdownRenderer = {
|
|
|
45
210
|
"",
|
|
46
211
|
"| Metric | Value |",
|
|
47
212
|
"|--------|-------|",
|
|
48
|
-
`| Total Agents | ${
|
|
213
|
+
`| Total Agents | ${data.summary.totalAgents} |`,
|
|
49
214
|
`| Active Agents | ${activeAgents} |`,
|
|
50
|
-
`| Total Runs | ${
|
|
215
|
+
`| Total Runs | ${data.summary.totalRuns} |`,
|
|
51
216
|
`| Completed Runs | ${completedRuns} |`,
|
|
52
217
|
`| Failed Runs | ${failedRuns} |`,
|
|
53
218
|
`| Total Tokens | ${totalTokens.toLocaleString()} |`,
|
|
54
219
|
`| Total Cost | $${totalCost.toFixed(4)} |`,
|
|
55
|
-
`| Total Tools | ${
|
|
220
|
+
`| Total Tools | ${data.summary.totalTools} |`,
|
|
56
221
|
`| Active Tools | ${activeTools} |`,
|
|
57
222
|
"",
|
|
58
223
|
"## Agents",
|
|
59
224
|
""
|
|
60
225
|
];
|
|
61
|
-
if (
|
|
226
|
+
if (data.agents.length === 0) {
|
|
62
227
|
lines.push("_No agents configured._");
|
|
63
228
|
} else {
|
|
64
229
|
lines.push("| Agent | Model | Status | Description |");
|
|
65
230
|
lines.push("|-------|-------|--------|-------------|");
|
|
66
|
-
for (const agent of
|
|
231
|
+
for (const agent of data.agents.slice(0, 5)) {
|
|
67
232
|
lines.push(`| ${agent.name} | ${agent.modelProvider}/${agent.modelName} | ${agent.status} | ${agent.description ?? "-"} |`);
|
|
68
233
|
}
|
|
69
|
-
if (
|
|
70
|
-
lines.push(`| ... | ... | ... | _${
|
|
234
|
+
if (data.agents.length > 5) {
|
|
235
|
+
lines.push(`| ... | ... | ... | _${data.summary.totalAgents - 5} more_ |`);
|
|
71
236
|
}
|
|
72
237
|
}
|
|
73
238
|
lines.push("");
|
|
74
239
|
lines.push("## Recent Runs");
|
|
75
240
|
lines.push("");
|
|
76
|
-
if (
|
|
241
|
+
if (data.runs.length === 0) {
|
|
77
242
|
lines.push("_No runs yet._");
|
|
78
243
|
} else {
|
|
79
244
|
lines.push("| Run ID | Agent | Status | Duration | Tokens | Cost |");
|
|
80
245
|
lines.push("|--------|-------|--------|----------|--------|------|");
|
|
81
|
-
for (const run of
|
|
246
|
+
for (const run of data.runs.slice(0, 5)) {
|
|
82
247
|
lines.push(`| ${run.id.slice(-8)} | ${run.agentName} | ${run.status} | ${run.durationMs ? formatDuration(run.durationMs) : "-"} | ${run.totalTokens ?? 0} | $${(run.estimatedCostUsd ?? 0).toFixed(4)} |`);
|
|
83
248
|
}
|
|
84
|
-
if (
|
|
85
|
-
lines.push(`| ... | ... | ... | ... | ... | _${
|
|
249
|
+
if (data.runs.length > 5) {
|
|
250
|
+
lines.push(`| ... | ... | ... | ... | ... | _${data.summary.totalRuns - 5} more_ |`);
|
|
86
251
|
}
|
|
87
252
|
}
|
|
88
253
|
lines.push("");
|
|
254
|
+
lines.push("## Visualization Overview");
|
|
255
|
+
lines.push("");
|
|
256
|
+
for (const item of visualizationItems) {
|
|
257
|
+
lines.push(`- **${item.title}** via \`${item.spec.meta.key}\``);
|
|
258
|
+
}
|
|
259
|
+
lines.push("");
|
|
89
260
|
lines.push("## Tools");
|
|
90
261
|
lines.push("");
|
|
91
262
|
const toolsByCategory = {};
|
|
92
|
-
for (const tool of
|
|
263
|
+
for (const tool of data.tools) {
|
|
93
264
|
const cat = tool.category;
|
|
94
265
|
if (!toolsByCategory[cat])
|
|
95
266
|
toolsByCategory[cat] = [];
|