@contractspec/example.agent-console 3.7.6 → 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 +52 -31
- package/CHANGELOG.md +29 -0
- package/README.md +112 -83
- package/dist/agent/agent.event.js +1 -1
- package/dist/agent/agent.handler.d.ts +3 -0
- package/dist/agent/agent.handler.js +730 -1
- package/dist/agent/agent.operation.js +1 -1
- package/dist/agent/index.d.ts +5 -5
- package/dist/agent/index.js +74 -73
- package/dist/agent.feature.js +179 -0
- package/dist/browser/agent/agent.event.js +1 -1
- package/dist/browser/agent/agent.handler.js +730 -1
- package/dist/browser/agent/agent.operation.js +1 -1
- package/dist/browser/agent/index.js +74 -73
- 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 +4075 -3161
- package/dist/browser/presentations/index.js +51 -51
- package/dist/browser/run/index.js +380 -374
- package/dist/browser/run/run.event.js +2 -2
- package/dist/browser/run/run.handler.js +666 -1
- package/dist/browser/run/run.presentation.js +2 -2
- package/dist/browser/shared/index.js +293 -1
- package/dist/browser/shared/mock-runs.js +5 -0
- package/dist/browser/tool/index.js +161 -161
- package/dist/browser/tool/tool.event.js +1 -1
- package/dist/browser/tool/tool.handler.js +479 -3
- package/dist/browser/tool/tool.presentation.js +2 -2
- package/dist/browser/ui/AgentDashboard.js +1816 -931
- package/dist/browser/ui/AgentDashboard.visualizations.js +217 -0
- package/dist/browser/ui/AgentRunList.js +360 -128
- package/dist/browser/ui/AgentToolRegistry.js +9 -9
- package/dist/browser/ui/hooks/index.js +611 -161
- package/dist/browser/ui/hooks/useAgentList.js +1 -1
- package/dist/browser/ui/hooks/useAgentMutations.js +444 -9
- package/dist/browser/ui/hooks/useRunList.js +26 -11
- package/dist/browser/ui/hooks/useToolList.js +1 -1
- package/dist/browser/ui/index.js +2161 -1258
- package/dist/browser/ui/modals/AgentActionsModal.js +13 -13
- package/dist/browser/ui/modals/CreateAgentModal.js +15 -15
- package/dist/browser/ui/modals/index.js +297 -297
- package/dist/browser/ui/renderers/agent-list.markdown.js +14 -5
- package/dist/browser/ui/renderers/agent-list.renderer.js +7 -7
- package/dist/browser/ui/renderers/dashboard.markdown.js +207 -36
- package/dist/browser/ui/renderers/index.js +359 -163
- 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/AgentListView.js +7 -7
- package/dist/browser/ui/views/RunDataTable.js +326 -0
- package/dist/browser/ui/views/RunListView.js +360 -128
- package/dist/browser/ui/views/ToolRegistryView.js +9 -9
- package/dist/browser/ui/views/index.js +478 -246
- 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 +2 -4
- package/dist/handlers/index.js +2142 -8
- package/dist/handlers/mock-handlers.test.d.ts +1 -0
- package/dist/index.d.ts +6 -4
- package/dist/index.js +4075 -3161
- package/dist/node/agent/agent.event.js +1 -1
- package/dist/node/agent/agent.handler.js +730 -1
- package/dist/node/agent/agent.operation.js +1 -1
- package/dist/node/agent/index.js +74 -73
- 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 +4075 -3161
- package/dist/node/presentations/index.js +51 -51
- package/dist/node/run/index.js +380 -374
- package/dist/node/run/run.event.js +2 -2
- package/dist/node/run/run.handler.js +666 -1
- package/dist/node/run/run.presentation.js +2 -2
- package/dist/node/shared/index.js +293 -1
- package/dist/node/shared/mock-runs.js +5 -0
- package/dist/node/tool/index.js +161 -161
- package/dist/node/tool/tool.event.js +1 -1
- package/dist/node/tool/tool.handler.js +479 -3
- package/dist/node/tool/tool.presentation.js +2 -2
- package/dist/node/ui/AgentDashboard.js +1816 -931
- package/dist/node/ui/AgentDashboard.visualizations.js +217 -0
- package/dist/node/ui/AgentRunList.js +360 -128
- package/dist/node/ui/AgentToolRegistry.js +9 -9
- package/dist/node/ui/hooks/index.js +611 -161
- package/dist/node/ui/hooks/useAgentList.js +1 -1
- package/dist/node/ui/hooks/useAgentMutations.js +444 -9
- package/dist/node/ui/hooks/useRunList.js +26 -11
- package/dist/node/ui/hooks/useToolList.js +1 -1
- package/dist/node/ui/index.js +2161 -1258
- package/dist/node/ui/modals/AgentActionsModal.js +13 -13
- package/dist/node/ui/modals/CreateAgentModal.js +15 -15
- package/dist/node/ui/modals/index.js +297 -297
- package/dist/node/ui/renderers/agent-list.markdown.js +14 -5
- package/dist/node/ui/renderers/agent-list.renderer.js +7 -7
- package/dist/node/ui/renderers/dashboard.markdown.js +207 -36
- package/dist/node/ui/renderers/index.js +359 -163
- 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/AgentListView.js +7 -7
- package/dist/node/ui/views/RunDataTable.js +326 -0
- package/dist/node/ui/views/RunListView.js +360 -128
- package/dist/node/ui/views/ToolRegistryView.js +9 -9
- package/dist/node/ui/views/index.js +478 -246
- 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.d.ts +3 -5
- package/dist/presentations/index.js +51 -51
- 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.d.ts +7 -7
- package/dist/run/index.js +380 -374
- package/dist/run/run.event.js +2 -2
- package/dist/run/run.handler.d.ts +7 -0
- package/dist/run/run.handler.js +666 -1
- package/dist/run/run.presentation.js +2 -2
- 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 +4 -1
- 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.d.ts +7 -7
- package/dist/tool/index.js +161 -161
- package/dist/tool/tool.event.js +1 -1
- package/dist/tool/tool.handler.d.ts +3 -0
- package/dist/tool/tool.handler.js +479 -3
- package/dist/tool/tool.presentation.js +2 -2
- package/dist/ui/AgentDashboard.js +1816 -931
- 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 +360 -128
- package/dist/ui/AgentToolRegistry.js +9 -9
- package/dist/ui/hooks/index.d.ts +4 -4
- package/dist/ui/hooks/index.js +611 -161
- package/dist/ui/hooks/useAgentList.d.ts +5 -0
- package/dist/ui/hooks/useAgentList.js +1 -1
- package/dist/ui/hooks/useAgentMutations.d.ts +9 -2
- package/dist/ui/hooks/useAgentMutations.js +444 -9
- package/dist/ui/hooks/useRunList.d.ts +13 -2
- package/dist/ui/hooks/useRunList.js +26 -11
- package/dist/ui/hooks/useToolList.d.ts +5 -0
- package/dist/ui/hooks/useToolList.js +1 -1
- package/dist/ui/index.d.ts +3 -3
- package/dist/ui/index.js +2161 -1258
- package/dist/ui/modals/AgentActionsModal.js +13 -13
- package/dist/ui/modals/CreateAgentModal.js +15 -15
- package/dist/ui/modals/index.d.ts +1 -1
- package/dist/ui/modals/index.js +297 -297
- package/dist/ui/renderers/agent-list.markdown.d.ts +5 -0
- package/dist/ui/renderers/agent-list.markdown.js +14 -5
- package/dist/ui/renderers/agent-list.renderer.js +7 -7
- package/dist/ui/renderers/dashboard.markdown.d.ts +5 -0
- package/dist/ui/renderers/dashboard.markdown.js +207 -36
- package/dist/ui/renderers/index.d.ts +2 -2
- package/dist/ui/renderers/index.js +359 -163
- package/dist/ui/renderers/run-list.markdown.d.ts +5 -0
- package/dist/ui/renderers/run-list.markdown.js +9 -4
- package/dist/ui/renderers/tool-registry.markdown.d.ts +6 -1
- package/dist/ui/renderers/tool-registry.markdown.js +15 -4
- package/dist/ui/views/AgentListView.js +7 -7
- package/dist/ui/views/RunDataTable.d.ts +18 -0
- package/dist/ui/views/RunDataTable.js +327 -0
- package/dist/ui/views/RunListView.js +360 -128
- package/dist/ui/views/ToolRegistryView.js +9 -9
- package/dist/ui/views/index.js +478 -246
- 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 +114 -12
- package/proofs/agent-console-meetup.replay.json +220 -0
- package/src/agent/agent.entity.ts +111 -111
- package/src/agent/agent.enum.ts +12 -12
- package/src/agent/agent.event.ts +91 -91
- package/src/agent/agent.handler.ts +144 -127
- package/src/agent/agent.operation.ts +400 -400
- package/src/agent/agent.presentation.ts +62 -62
- package/src/agent/agent.schema.ts +175 -175
- package/src/agent/agent.test-spec.ts +48 -48
- package/src/agent/index.ts +46 -51
- package/src/agent.capability.ts +11 -11
- package/src/agent.feature.ts +134 -131
- package/src/docs/agent-console.docblock.ts +52 -49
- package/src/example.test.ts +75 -0
- package/src/example.ts +34 -35
- package/src/handlers/agent.handlers.ts +576 -522
- package/src/handlers/index.ts +30 -14
- package/src/handlers/mock-handlers.test.ts +77 -0
- package/src/index.ts +10 -9
- package/src/presentations/index.ts +11 -13
- 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/index.ts +49 -54
- package/src/run/run.entity.ts +137 -137
- package/src/run/run.enum.ts +18 -18
- package/src/run/run.event.ts +174 -174
- package/src/run/run.handler.ts +113 -96
- package/src/run/run.operation.ts +474 -474
- package/src/run/run.presentation.ts +42 -42
- package/src/run/run.schema.ts +126 -126
- package/src/run/run.test-spec.ts +48 -48
- package/src/seeders/index.ts +21 -21
- 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 +12 -1
- package/src/shared/mock-agents.ts +76 -76
- package/src/shared/mock-runs.ts +107 -102
- package/src/shared/mock-tools.ts +140 -140
- package/src/shared/overlay-types.ts +23 -23
- package/src/tool/index.ts +39 -44
- package/src/tool/tool.entity.ts +73 -73
- package/src/tool/tool.enum.ts +13 -13
- package/src/tool/tool.event.ts +80 -80
- package/src/tool/tool.handler.ts +124 -107
- package/src/tool/tool.operation.ts +328 -328
- package/src/tool/tool.presentation.ts +43 -43
- package/src/tool/tool.schema.ts +106 -106
- package/src/tool/tool.test-spec.ts +48 -48
- package/src/ui/AgentDashboard.sandbox.test.tsx +312 -0
- package/src/ui/AgentDashboard.tsx +351 -348
- package/src/ui/AgentDashboard.visualizations.tsx +35 -0
- package/src/ui/hooks/index.ts +7 -7
- package/src/ui/hooks/useAgentList.ts +57 -56
- package/src/ui/hooks/useAgentMutations.ts +168 -159
- package/src/ui/hooks/useRunList.ts +90 -57
- package/src/ui/hooks/useToolList.ts +102 -101
- package/src/ui/index.ts +6 -9
- package/src/ui/modals/AgentActionsModal.tsx +262 -262
- package/src/ui/modals/CreateAgentModal.tsx +232 -232
- package/src/ui/modals/index.ts +1 -1
- package/src/ui/overlays/demo-overlays.ts +52 -52
- package/src/ui/renderers/agent-list.markdown.ts +81 -61
- package/src/ui/renderers/agent-list.renderer.tsx +14 -14
- package/src/ui/renderers/dashboard.markdown.ts +135 -139
- package/src/ui/renderers/index.ts +3 -4
- package/src/ui/renderers/run-list.markdown.ts +56 -47
- package/src/ui/renderers/tool-registry.markdown.ts +79 -66
- package/src/ui/views/AgentListView.tsx +90 -90
- package/src/ui/views/RunDataTable.tsx +74 -0
- package/src/ui/views/RunListView.tsx +84 -158
- package/src/ui/views/ToolRegistryView.tsx +113 -113
- 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/tsconfig.json +7 -8
- package/tsdown.config.js +24 -3
|
@@ -1,6 +1,184 @@
|
|
|
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/hooks/useAgentList.ts
|
|
2
|
-
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
3
180
|
import { useTemplateRuntime } from "@contractspec/lib.example-shared-ui";
|
|
181
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
4
182
|
function useAgentList(options = {}) {
|
|
5
183
|
const { handlers, projectId } = useTemplateRuntime();
|
|
6
184
|
const { agent } = handlers;
|
|
@@ -51,16 +229,78 @@ function useAgentList(options = {}) {
|
|
|
51
229
|
};
|
|
52
230
|
}
|
|
53
231
|
|
|
232
|
+
// src/ui/renderers/agent-list.markdown.ts
|
|
233
|
+
import {
|
|
234
|
+
AGENT_CONSOLE_DEMO_ORGANIZATION_ID,
|
|
235
|
+
AGENT_CONSOLE_DEMO_PROJECT_ID,
|
|
236
|
+
createAgentConsoleDemoHandlers
|
|
237
|
+
} from "@contractspec/example.agent-console/shared";
|
|
238
|
+
var agentListMarkdownRenderer = {
|
|
239
|
+
target: "markdown",
|
|
240
|
+
render: async (desc, ctx) => {
|
|
241
|
+
if (desc.source.type !== "component" || desc.source.componentKey !== "AgentListView") {
|
|
242
|
+
throw new Error("agentListMarkdownRenderer: not AgentListView");
|
|
243
|
+
}
|
|
244
|
+
const data = Array.isArray(ctx?.data) ? {
|
|
245
|
+
items: ctx.data,
|
|
246
|
+
total: ctx.data.length,
|
|
247
|
+
hasMore: false
|
|
248
|
+
} : await createAgentConsoleDemoHandlers({
|
|
249
|
+
projectId: AGENT_CONSOLE_DEMO_PROJECT_ID
|
|
250
|
+
}).listAgents({
|
|
251
|
+
projectId: AGENT_CONSOLE_DEMO_PROJECT_ID,
|
|
252
|
+
organizationId: AGENT_CONSOLE_DEMO_ORGANIZATION_ID,
|
|
253
|
+
limit: 50,
|
|
254
|
+
offset: 0
|
|
255
|
+
});
|
|
256
|
+
const lines = [
|
|
257
|
+
`# ${desc.meta.description ?? "Agent List"}`,
|
|
258
|
+
"",
|
|
259
|
+
`> ${desc.meta.key} v${desc.meta.version}`,
|
|
260
|
+
"",
|
|
261
|
+
`**Total Agents:** ${data.total}`,
|
|
262
|
+
"",
|
|
263
|
+
"## Agents",
|
|
264
|
+
""
|
|
265
|
+
];
|
|
266
|
+
const byStatus = {};
|
|
267
|
+
for (const agent of data.items) {
|
|
268
|
+
const status = agent.status;
|
|
269
|
+
if (byStatus[status]) {
|
|
270
|
+
byStatus[status].push(agent);
|
|
271
|
+
} else {
|
|
272
|
+
byStatus[status] = [agent];
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
for (const [status, agents] of Object.entries(byStatus)) {
|
|
276
|
+
lines.push(`### ${status} (${agents.length})`);
|
|
277
|
+
lines.push("");
|
|
278
|
+
for (const agent of agents) {
|
|
279
|
+
lines.push(`- **${agent.name}** (${agent.modelProvider}/${agent.modelName})`);
|
|
280
|
+
if (agent.description) {
|
|
281
|
+
lines.push(` > ${agent.description}`);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
lines.push("");
|
|
285
|
+
}
|
|
286
|
+
return {
|
|
287
|
+
mimeType: "text/markdown",
|
|
288
|
+
body: lines.join(`
|
|
289
|
+
`)
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
};
|
|
293
|
+
|
|
54
294
|
// src/ui/views/AgentListView.tsx
|
|
55
295
|
import {
|
|
56
296
|
Button,
|
|
57
|
-
|
|
58
|
-
StatCardGroup,
|
|
297
|
+
EmptyState,
|
|
59
298
|
EntityCard,
|
|
60
|
-
StatusChip,
|
|
61
|
-
LoaderBlock,
|
|
62
299
|
ErrorState,
|
|
63
|
-
|
|
300
|
+
LoaderBlock,
|
|
301
|
+
StatCard,
|
|
302
|
+
StatCardGroup,
|
|
303
|
+
StatusChip
|
|
64
304
|
} from "@contractspec/lib.design-system";
|
|
65
305
|
import { jsxDEV } from "react/jsx-dev-runtime";
|
|
66
306
|
"use client";
|
|
@@ -125,7 +365,7 @@ function AgentListView() {
|
|
|
125
365
|
className: "flex items-center justify-between",
|
|
126
366
|
children: [
|
|
127
367
|
/* @__PURE__ */ jsxDEV("h3", {
|
|
128
|
-
className: "text-lg
|
|
368
|
+
className: "font-semibold text-lg",
|
|
129
369
|
children: "Agents"
|
|
130
370
|
}, undefined, false, undefined, this),
|
|
131
371
|
/* @__PURE__ */ jsxDEV(Button, {
|
|
@@ -176,50 +416,105 @@ var agentListReactRenderer = {
|
|
|
176
416
|
}
|
|
177
417
|
};
|
|
178
418
|
|
|
179
|
-
// src/ui/renderers/
|
|
419
|
+
// src/ui/renderers/dashboard.markdown.ts
|
|
180
420
|
import {
|
|
181
|
-
|
|
182
|
-
} from "@contractspec/example.agent-console/
|
|
183
|
-
|
|
421
|
+
getFallbackAgentConsoleDashboardData
|
|
422
|
+
} from "@contractspec/example.agent-console/shared";
|
|
423
|
+
function formatDuration(ms) {
|
|
424
|
+
if (ms < 1000)
|
|
425
|
+
return `${ms}ms`;
|
|
426
|
+
if (ms < 60000)
|
|
427
|
+
return `${(ms / 1000).toFixed(1)}s`;
|
|
428
|
+
return `${(ms / 60000).toFixed(1)}m`;
|
|
429
|
+
}
|
|
430
|
+
var agentDashboardMarkdownRenderer = {
|
|
184
431
|
target: "markdown",
|
|
185
|
-
render: async (desc) => {
|
|
186
|
-
if (desc.source.type !== "component" || desc.source.componentKey !== "
|
|
187
|
-
throw new Error("
|
|
432
|
+
render: async (desc, ctx) => {
|
|
433
|
+
if (desc.source.type !== "component" || desc.source.componentKey !== "AgentConsoleDashboard") {
|
|
434
|
+
throw new Error("agentDashboardMarkdownRenderer: not AgentConsoleDashboard");
|
|
188
435
|
}
|
|
189
|
-
const data = await
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
436
|
+
const data = ctx?.data ?? await getFallbackAgentConsoleDashboardData();
|
|
437
|
+
const activeAgents = data.agents.filter((a) => a.status === "ACTIVE").length;
|
|
438
|
+
const completedRuns = data.runs.filter((r) => r.status === "COMPLETED").length;
|
|
439
|
+
const failedRuns = data.runs.filter((r) => r.status === "FAILED").length;
|
|
440
|
+
const totalTokens = data.runs.reduce((sum, r) => sum + (r.totalTokens ?? 0), 0);
|
|
441
|
+
const totalCost = data.runs.reduce((sum, r) => sum + (r.estimatedCostUsd ?? 0), 0);
|
|
442
|
+
const activeTools = data.tools.filter((t) => t.status === "ACTIVE").length;
|
|
443
|
+
const visualizationItems = createAgentVisualizationItems(data.runs);
|
|
194
444
|
const lines = [
|
|
195
|
-
|
|
445
|
+
"# Agent Console Dashboard",
|
|
196
446
|
"",
|
|
197
|
-
|
|
447
|
+
"> AI agent operations overview",
|
|
198
448
|
"",
|
|
199
|
-
|
|
449
|
+
"## Summary",
|
|
450
|
+
"",
|
|
451
|
+
"| Metric | Value |",
|
|
452
|
+
"|--------|-------|",
|
|
453
|
+
`| Total Agents | ${data.summary.totalAgents} |`,
|
|
454
|
+
`| Active Agents | ${activeAgents} |`,
|
|
455
|
+
`| Total Runs | ${data.summary.totalRuns} |`,
|
|
456
|
+
`| Completed Runs | ${completedRuns} |`,
|
|
457
|
+
`| Failed Runs | ${failedRuns} |`,
|
|
458
|
+
`| Total Tokens | ${totalTokens.toLocaleString()} |`,
|
|
459
|
+
`| Total Cost | $${totalCost.toFixed(4)} |`,
|
|
460
|
+
`| Total Tools | ${data.summary.totalTools} |`,
|
|
461
|
+
`| Active Tools | ${activeTools} |`,
|
|
200
462
|
"",
|
|
201
463
|
"## Agents",
|
|
202
464
|
""
|
|
203
465
|
];
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
466
|
+
if (data.agents.length === 0) {
|
|
467
|
+
lines.push("_No agents configured._");
|
|
468
|
+
} else {
|
|
469
|
+
lines.push("| Agent | Model | Status | Description |");
|
|
470
|
+
lines.push("|-------|-------|--------|-------------|");
|
|
471
|
+
for (const agent of data.agents.slice(0, 5)) {
|
|
472
|
+
lines.push(`| ${agent.name} | ${agent.modelProvider}/${agent.modelName} | ${agent.status} | ${agent.description ?? "-"} |`);
|
|
473
|
+
}
|
|
474
|
+
if (data.agents.length > 5) {
|
|
475
|
+
lines.push(`| ... | ... | ... | _${data.summary.totalAgents - 5} more_ |`);
|
|
211
476
|
}
|
|
212
477
|
}
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
478
|
+
lines.push("");
|
|
479
|
+
lines.push("## Recent Runs");
|
|
480
|
+
lines.push("");
|
|
481
|
+
if (data.runs.length === 0) {
|
|
482
|
+
lines.push("_No runs yet._");
|
|
483
|
+
} else {
|
|
484
|
+
lines.push("| Run ID | Agent | Status | Duration | Tokens | Cost |");
|
|
485
|
+
lines.push("|--------|-------|--------|----------|--------|------|");
|
|
486
|
+
for (const run of data.runs.slice(0, 5)) {
|
|
487
|
+
lines.push(`| ${run.id.slice(-8)} | ${run.agentName} | ${run.status} | ${run.durationMs ? formatDuration(run.durationMs) : "-"} | ${run.totalTokens ?? 0} | $${(run.estimatedCostUsd ?? 0).toFixed(4)} |`);
|
|
488
|
+
}
|
|
489
|
+
if (data.runs.length > 5) {
|
|
490
|
+
lines.push(`| ... | ... | ... | ... | ... | _${data.summary.totalRuns - 5} more_ |`);
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
lines.push("");
|
|
494
|
+
lines.push("## Visualization Overview");
|
|
495
|
+
lines.push("");
|
|
496
|
+
for (const item of visualizationItems) {
|
|
497
|
+
lines.push(`- **${item.title}** via \`${item.spec.meta.key}\``);
|
|
498
|
+
}
|
|
499
|
+
lines.push("");
|
|
500
|
+
lines.push("## Tools");
|
|
501
|
+
lines.push("");
|
|
502
|
+
const toolsByCategory = {};
|
|
503
|
+
for (const tool of data.tools) {
|
|
504
|
+
const cat = tool.category;
|
|
505
|
+
if (!toolsByCategory[cat])
|
|
506
|
+
toolsByCategory[cat] = [];
|
|
507
|
+
toolsByCategory[cat].push(tool);
|
|
508
|
+
}
|
|
509
|
+
if (Object.keys(toolsByCategory).length === 0) {
|
|
510
|
+
lines.push("_No tools registered._");
|
|
511
|
+
} else {
|
|
512
|
+
lines.push("| Category | Tools | Active |");
|
|
513
|
+
lines.push("|----------|-------|--------|");
|
|
514
|
+
for (const [category, tools] of Object.entries(toolsByCategory).sort()) {
|
|
515
|
+
const active = tools.filter((t) => t.status === "ACTIVE").length;
|
|
516
|
+
lines.push(`| ${category} | ${tools.length} | ${active} |`);
|
|
221
517
|
}
|
|
222
|
-
lines.push("");
|
|
223
518
|
}
|
|
224
519
|
return {
|
|
225
520
|
mimeType: "text/markdown",
|
|
@@ -230,8 +525,11 @@ var agentListMarkdownRenderer = {
|
|
|
230
525
|
};
|
|
231
526
|
|
|
232
527
|
// src/ui/renderers/run-list.markdown.ts
|
|
233
|
-
import {
|
|
234
|
-
|
|
528
|
+
import {
|
|
529
|
+
AGENT_CONSOLE_DEMO_PROJECT_ID as AGENT_CONSOLE_DEMO_PROJECT_ID2,
|
|
530
|
+
createAgentConsoleDemoHandlers as createAgentConsoleDemoHandlers2
|
|
531
|
+
} from "@contractspec/example.agent-console/shared";
|
|
532
|
+
function formatDuration2(ms) {
|
|
235
533
|
if (ms < 1000)
|
|
236
534
|
return `${ms}ms`;
|
|
237
535
|
if (ms < 60000)
|
|
@@ -240,12 +538,14 @@ function formatDuration(ms) {
|
|
|
240
538
|
}
|
|
241
539
|
var runListMarkdownRenderer = {
|
|
242
540
|
target: "markdown",
|
|
243
|
-
render: async (desc) => {
|
|
541
|
+
render: async (desc, ctx) => {
|
|
244
542
|
if (desc.source.type !== "component" || desc.source.componentKey !== "RunListView") {
|
|
245
543
|
throw new Error("runListMarkdownRenderer: not RunListView");
|
|
246
544
|
}
|
|
247
|
-
const data = await
|
|
248
|
-
|
|
545
|
+
const data = Array.isArray(ctx?.data) ? { items: ctx.data, total: ctx.data.length, hasMore: false } : await createAgentConsoleDemoHandlers2({
|
|
546
|
+
projectId: AGENT_CONSOLE_DEMO_PROJECT_ID2
|
|
547
|
+
}).listRuns({
|
|
548
|
+
projectId: AGENT_CONSOLE_DEMO_PROJECT_ID2,
|
|
249
549
|
limit: 20,
|
|
250
550
|
offset: 0
|
|
251
551
|
});
|
|
@@ -262,7 +562,7 @@ var runListMarkdownRenderer = {
|
|
|
262
562
|
"| --- | --- | --- | --- | --- | --- |"
|
|
263
563
|
];
|
|
264
564
|
for (const run of data.items.slice(0, 10)) {
|
|
265
|
-
lines.push(`| ${run.id.slice(-8)} | ${run.agentName} | ${run.status} | ${run.durationMs ?
|
|
565
|
+
lines.push(`| ${run.id.slice(-8)} | ${run.agentName} | ${run.status} | ${run.durationMs ? formatDuration2(run.durationMs) : "-"} | ${run.totalTokens} | $${run.estimatedCostUsd?.toFixed(4) ?? "-"} |`);
|
|
266
566
|
}
|
|
267
567
|
return {
|
|
268
568
|
mimeType: "text/markdown",
|
|
@@ -273,15 +573,26 @@ var runListMarkdownRenderer = {
|
|
|
273
573
|
};
|
|
274
574
|
|
|
275
575
|
// src/ui/renderers/tool-registry.markdown.ts
|
|
276
|
-
import {
|
|
576
|
+
import {
|
|
577
|
+
AGENT_CONSOLE_DEMO_ORGANIZATION_ID as AGENT_CONSOLE_DEMO_ORGANIZATION_ID2,
|
|
578
|
+
AGENT_CONSOLE_DEMO_PROJECT_ID as AGENT_CONSOLE_DEMO_PROJECT_ID3,
|
|
579
|
+
createAgentConsoleDemoHandlers as createAgentConsoleDemoHandlers3
|
|
580
|
+
} from "@contractspec/example.agent-console/shared";
|
|
277
581
|
var toolRegistryMarkdownRenderer = {
|
|
278
582
|
target: "markdown",
|
|
279
|
-
render: async (desc) => {
|
|
583
|
+
render: async (desc, ctx) => {
|
|
280
584
|
if (desc.source.type !== "component" || desc.source.componentKey !== "ToolRegistryView") {
|
|
281
585
|
throw new Error("toolRegistryMarkdownRenderer: not ToolRegistryView");
|
|
282
586
|
}
|
|
283
|
-
const data =
|
|
284
|
-
|
|
587
|
+
const data = Array.isArray(ctx?.data) ? {
|
|
588
|
+
items: ctx.data,
|
|
589
|
+
total: ctx.data.length,
|
|
590
|
+
hasMore: false
|
|
591
|
+
} : await createAgentConsoleDemoHandlers3({
|
|
592
|
+
projectId: AGENT_CONSOLE_DEMO_PROJECT_ID3
|
|
593
|
+
}).listTools({
|
|
594
|
+
projectId: AGENT_CONSOLE_DEMO_PROJECT_ID3,
|
|
595
|
+
organizationId: AGENT_CONSOLE_DEMO_ORGANIZATION_ID2,
|
|
285
596
|
limit: 50,
|
|
286
597
|
offset: 0
|
|
287
598
|
});
|
|
@@ -322,121 +633,6 @@ var toolRegistryMarkdownRenderer = {
|
|
|
322
633
|
};
|
|
323
634
|
}
|
|
324
635
|
};
|
|
325
|
-
|
|
326
|
-
// src/ui/renderers/dashboard.markdown.ts
|
|
327
|
-
import {
|
|
328
|
-
mockListAgentsHandler as mockListAgentsHandler2,
|
|
329
|
-
mockListRunsHandler as mockListRunsHandler2,
|
|
330
|
-
mockListToolsHandler as mockListToolsHandler2
|
|
331
|
-
} from "@contractspec/example.agent-console/handlers";
|
|
332
|
-
function formatDuration2(ms) {
|
|
333
|
-
if (ms < 1000)
|
|
334
|
-
return `${ms}ms`;
|
|
335
|
-
if (ms < 60000)
|
|
336
|
-
return `${(ms / 1000).toFixed(1)}s`;
|
|
337
|
-
return `${(ms / 60000).toFixed(1)}m`;
|
|
338
|
-
}
|
|
339
|
-
var agentDashboardMarkdownRenderer = {
|
|
340
|
-
target: "markdown",
|
|
341
|
-
render: async (desc) => {
|
|
342
|
-
if (desc.source.type !== "component" || desc.source.componentKey !== "AgentConsoleDashboard") {
|
|
343
|
-
throw new Error("agentDashboardMarkdownRenderer: not AgentConsoleDashboard");
|
|
344
|
-
}
|
|
345
|
-
const [agentsData, runsData, toolsData] = await Promise.all([
|
|
346
|
-
mockListAgentsHandler2({
|
|
347
|
-
organizationId: "demo-org",
|
|
348
|
-
limit: 100
|
|
349
|
-
}),
|
|
350
|
-
mockListRunsHandler2({
|
|
351
|
-
limit: 100
|
|
352
|
-
}),
|
|
353
|
-
mockListToolsHandler2({
|
|
354
|
-
organizationId: "demo-org",
|
|
355
|
-
limit: 100
|
|
356
|
-
})
|
|
357
|
-
]);
|
|
358
|
-
const activeAgents = agentsData.items.filter((a) => a.status === "ACTIVE").length;
|
|
359
|
-
const completedRuns = runsData.items.filter((r) => r.status === "COMPLETED").length;
|
|
360
|
-
const failedRuns = runsData.items.filter((r) => r.status === "FAILED").length;
|
|
361
|
-
const totalTokens = runsData.items.reduce((sum, r) => sum + (r.totalTokens ?? 0), 0);
|
|
362
|
-
const totalCost = runsData.items.reduce((sum, r) => sum + (r.estimatedCostUsd ?? 0), 0);
|
|
363
|
-
const activeTools = toolsData.items.filter((t) => t.status === "ACTIVE").length;
|
|
364
|
-
const lines = [
|
|
365
|
-
"# Agent Console Dashboard",
|
|
366
|
-
"",
|
|
367
|
-
"> AI agent operations overview",
|
|
368
|
-
"",
|
|
369
|
-
"## Summary",
|
|
370
|
-
"",
|
|
371
|
-
"| Metric | Value |",
|
|
372
|
-
"|--------|-------|",
|
|
373
|
-
`| Total Agents | ${agentsData.total} |`,
|
|
374
|
-
`| Active Agents | ${activeAgents} |`,
|
|
375
|
-
`| Total Runs | ${runsData.total} |`,
|
|
376
|
-
`| Completed Runs | ${completedRuns} |`,
|
|
377
|
-
`| Failed Runs | ${failedRuns} |`,
|
|
378
|
-
`| Total Tokens | ${totalTokens.toLocaleString()} |`,
|
|
379
|
-
`| Total Cost | $${totalCost.toFixed(4)} |`,
|
|
380
|
-
`| Total Tools | ${toolsData.total} |`,
|
|
381
|
-
`| Active Tools | ${activeTools} |`,
|
|
382
|
-
"",
|
|
383
|
-
"## Agents",
|
|
384
|
-
""
|
|
385
|
-
];
|
|
386
|
-
if (agentsData.items.length === 0) {
|
|
387
|
-
lines.push("_No agents configured._");
|
|
388
|
-
} else {
|
|
389
|
-
lines.push("| Agent | Model | Status | Description |");
|
|
390
|
-
lines.push("|-------|-------|--------|-------------|");
|
|
391
|
-
for (const agent of agentsData.items.slice(0, 5)) {
|
|
392
|
-
lines.push(`| ${agent.name} | ${agent.modelProvider}/${agent.modelName} | ${agent.status} | ${agent.description ?? "-"} |`);
|
|
393
|
-
}
|
|
394
|
-
if (agentsData.items.length > 5) {
|
|
395
|
-
lines.push(`| ... | ... | ... | _${agentsData.total - 5} more_ |`);
|
|
396
|
-
}
|
|
397
|
-
}
|
|
398
|
-
lines.push("");
|
|
399
|
-
lines.push("## Recent Runs");
|
|
400
|
-
lines.push("");
|
|
401
|
-
if (runsData.items.length === 0) {
|
|
402
|
-
lines.push("_No runs yet._");
|
|
403
|
-
} else {
|
|
404
|
-
lines.push("| Run ID | Agent | Status | Duration | Tokens | Cost |");
|
|
405
|
-
lines.push("|--------|-------|--------|----------|--------|------|");
|
|
406
|
-
for (const run of runsData.items.slice(0, 5)) {
|
|
407
|
-
lines.push(`| ${run.id.slice(-8)} | ${run.agentName} | ${run.status} | ${run.durationMs ? formatDuration2(run.durationMs) : "-"} | ${run.totalTokens ?? 0} | $${(run.estimatedCostUsd ?? 0).toFixed(4)} |`);
|
|
408
|
-
}
|
|
409
|
-
if (runsData.items.length > 5) {
|
|
410
|
-
lines.push(`| ... | ... | ... | ... | ... | _${runsData.total - 5} more_ |`);
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
lines.push("");
|
|
414
|
-
lines.push("## Tools");
|
|
415
|
-
lines.push("");
|
|
416
|
-
const toolsByCategory = {};
|
|
417
|
-
for (const tool of toolsData.items) {
|
|
418
|
-
const cat = tool.category;
|
|
419
|
-
if (!toolsByCategory[cat])
|
|
420
|
-
toolsByCategory[cat] = [];
|
|
421
|
-
toolsByCategory[cat].push(tool);
|
|
422
|
-
}
|
|
423
|
-
if (Object.keys(toolsByCategory).length === 0) {
|
|
424
|
-
lines.push("_No tools registered._");
|
|
425
|
-
} else {
|
|
426
|
-
lines.push("| Category | Tools | Active |");
|
|
427
|
-
lines.push("|----------|-------|--------|");
|
|
428
|
-
for (const [category, tools] of Object.entries(toolsByCategory).sort()) {
|
|
429
|
-
const active = tools.filter((t) => t.status === "ACTIVE").length;
|
|
430
|
-
lines.push(`| ${category} | ${tools.length} | ${active} |`);
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
|
-
return {
|
|
434
|
-
mimeType: "text/markdown",
|
|
435
|
-
body: lines.join(`
|
|
436
|
-
`)
|
|
437
|
-
};
|
|
438
|
-
}
|
|
439
|
-
};
|
|
440
636
|
export {
|
|
441
637
|
toolRegistryMarkdownRenderer,
|
|
442
638
|
runListMarkdownRenderer,
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
// src/ui/renderers/run-list.markdown.ts
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
AGENT_CONSOLE_DEMO_PROJECT_ID,
|
|
4
|
+
createAgentConsoleDemoHandlers
|
|
5
|
+
} from "@contractspec/example.agent-console/shared";
|
|
3
6
|
function formatDuration(ms) {
|
|
4
7
|
if (ms < 1000)
|
|
5
8
|
return `${ms}ms`;
|
|
@@ -9,12 +12,14 @@ function formatDuration(ms) {
|
|
|
9
12
|
}
|
|
10
13
|
var runListMarkdownRenderer = {
|
|
11
14
|
target: "markdown",
|
|
12
|
-
render: async (desc) => {
|
|
15
|
+
render: async (desc, ctx) => {
|
|
13
16
|
if (desc.source.type !== "component" || desc.source.componentKey !== "RunListView") {
|
|
14
17
|
throw new Error("runListMarkdownRenderer: not RunListView");
|
|
15
18
|
}
|
|
16
|
-
const data = await
|
|
17
|
-
|
|
19
|
+
const data = Array.isArray(ctx?.data) ? { items: ctx.data, total: ctx.data.length, hasMore: false } : await createAgentConsoleDemoHandlers({
|
|
20
|
+
projectId: AGENT_CONSOLE_DEMO_PROJECT_ID
|
|
21
|
+
}).listRuns({
|
|
22
|
+
projectId: AGENT_CONSOLE_DEMO_PROJECT_ID,
|
|
18
23
|
limit: 20,
|
|
19
24
|
offset: 0
|
|
20
25
|
});
|
|
@@ -1,13 +1,24 @@
|
|
|
1
1
|
// src/ui/renderers/tool-registry.markdown.ts
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
AGENT_CONSOLE_DEMO_ORGANIZATION_ID,
|
|
4
|
+
AGENT_CONSOLE_DEMO_PROJECT_ID,
|
|
5
|
+
createAgentConsoleDemoHandlers
|
|
6
|
+
} from "@contractspec/example.agent-console/shared";
|
|
3
7
|
var toolRegistryMarkdownRenderer = {
|
|
4
8
|
target: "markdown",
|
|
5
|
-
render: async (desc) => {
|
|
9
|
+
render: async (desc, ctx) => {
|
|
6
10
|
if (desc.source.type !== "component" || desc.source.componentKey !== "ToolRegistryView") {
|
|
7
11
|
throw new Error("toolRegistryMarkdownRenderer: not ToolRegistryView");
|
|
8
12
|
}
|
|
9
|
-
const data =
|
|
10
|
-
|
|
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
|
+
}).listTools({
|
|
20
|
+
projectId: AGENT_CONSOLE_DEMO_PROJECT_ID,
|
|
21
|
+
organizationId: AGENT_CONSOLE_DEMO_ORGANIZATION_ID,
|
|
11
22
|
limit: 50,
|
|
12
23
|
offset: 0
|
|
13
24
|
});
|