@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.
Files changed (288) hide show
  1. package/.turbo/turbo-build.log +126 -105
  2. package/AGENTS.md +52 -31
  3. package/CHANGELOG.md +29 -0
  4. package/README.md +112 -83
  5. package/dist/agent/agent.event.js +1 -1
  6. package/dist/agent/agent.handler.d.ts +3 -0
  7. package/dist/agent/agent.handler.js +730 -1
  8. package/dist/agent/agent.operation.js +1 -1
  9. package/dist/agent/index.d.ts +5 -5
  10. package/dist/agent/index.js +74 -73
  11. package/dist/agent.feature.js +179 -0
  12. package/dist/browser/agent/agent.event.js +1 -1
  13. package/dist/browser/agent/agent.handler.js +730 -1
  14. package/dist/browser/agent/agent.operation.js +1 -1
  15. package/dist/browser/agent/index.js +74 -73
  16. package/dist/browser/agent.feature.js +179 -0
  17. package/dist/browser/docs/agent-console.docblock.js +11 -8
  18. package/dist/browser/docs/index.js +11 -8
  19. package/dist/browser/example.js +2 -3
  20. package/dist/browser/handlers/agent.handlers.js +1883 -2
  21. package/dist/browser/handlers/index.js +2142 -8
  22. package/dist/browser/index.js +4075 -3161
  23. package/dist/browser/presentations/index.js +51 -51
  24. package/dist/browser/run/index.js +380 -374
  25. package/dist/browser/run/run.event.js +2 -2
  26. package/dist/browser/run/run.handler.js +666 -1
  27. package/dist/browser/run/run.presentation.js +2 -2
  28. package/dist/browser/shared/index.js +293 -1
  29. package/dist/browser/shared/mock-runs.js +5 -0
  30. package/dist/browser/tool/index.js +161 -161
  31. package/dist/browser/tool/tool.event.js +1 -1
  32. package/dist/browser/tool/tool.handler.js +479 -3
  33. package/dist/browser/tool/tool.presentation.js +2 -2
  34. package/dist/browser/ui/AgentDashboard.js +1816 -931
  35. package/dist/browser/ui/AgentDashboard.visualizations.js +217 -0
  36. package/dist/browser/ui/AgentRunList.js +360 -128
  37. package/dist/browser/ui/AgentToolRegistry.js +9 -9
  38. package/dist/browser/ui/hooks/index.js +611 -161
  39. package/dist/browser/ui/hooks/useAgentList.js +1 -1
  40. package/dist/browser/ui/hooks/useAgentMutations.js +444 -9
  41. package/dist/browser/ui/hooks/useRunList.js +26 -11
  42. package/dist/browser/ui/hooks/useToolList.js +1 -1
  43. package/dist/browser/ui/index.js +2161 -1258
  44. package/dist/browser/ui/modals/AgentActionsModal.js +13 -13
  45. package/dist/browser/ui/modals/CreateAgentModal.js +15 -15
  46. package/dist/browser/ui/modals/index.js +297 -297
  47. package/dist/browser/ui/renderers/agent-list.markdown.js +14 -5
  48. package/dist/browser/ui/renderers/agent-list.renderer.js +7 -7
  49. package/dist/browser/ui/renderers/dashboard.markdown.js +207 -36
  50. package/dist/browser/ui/renderers/index.js +359 -163
  51. package/dist/browser/ui/renderers/run-list.markdown.js +9 -4
  52. package/dist/browser/ui/renderers/tool-registry.markdown.js +15 -4
  53. package/dist/browser/ui/views/AgentListView.js +7 -7
  54. package/dist/browser/ui/views/RunDataTable.js +326 -0
  55. package/dist/browser/ui/views/RunListView.js +360 -128
  56. package/dist/browser/ui/views/ToolRegistryView.js +9 -9
  57. package/dist/browser/ui/views/index.js +478 -246
  58. package/dist/browser/ui/views/run-data-table.columns.js +271 -0
  59. package/dist/browser/ui/views/run-list.shared.js +177 -0
  60. package/dist/browser/visualizations/catalog.js +134 -0
  61. package/dist/browser/visualizations/index.js +187 -0
  62. package/dist/browser/visualizations/selectors.js +181 -0
  63. package/dist/docs/agent-console.docblock.js +11 -8
  64. package/dist/docs/index.js +11 -8
  65. package/dist/example.js +2 -3
  66. package/dist/example.test.d.ts +1 -0
  67. package/dist/handlers/agent.handlers.d.ts +2 -0
  68. package/dist/handlers/agent.handlers.js +1883 -2
  69. package/dist/handlers/index.d.ts +2 -4
  70. package/dist/handlers/index.js +2142 -8
  71. package/dist/handlers/mock-handlers.test.d.ts +1 -0
  72. package/dist/index.d.ts +6 -4
  73. package/dist/index.js +4075 -3161
  74. package/dist/node/agent/agent.event.js +1 -1
  75. package/dist/node/agent/agent.handler.js +730 -1
  76. package/dist/node/agent/agent.operation.js +1 -1
  77. package/dist/node/agent/index.js +74 -73
  78. package/dist/node/agent.feature.js +179 -0
  79. package/dist/node/docs/agent-console.docblock.js +11 -8
  80. package/dist/node/docs/index.js +11 -8
  81. package/dist/node/example.js +2 -3
  82. package/dist/node/handlers/agent.handlers.js +1883 -2
  83. package/dist/node/handlers/index.js +2142 -8
  84. package/dist/node/index.js +4075 -3161
  85. package/dist/node/presentations/index.js +51 -51
  86. package/dist/node/run/index.js +380 -374
  87. package/dist/node/run/run.event.js +2 -2
  88. package/dist/node/run/run.handler.js +666 -1
  89. package/dist/node/run/run.presentation.js +2 -2
  90. package/dist/node/shared/index.js +293 -1
  91. package/dist/node/shared/mock-runs.js +5 -0
  92. package/dist/node/tool/index.js +161 -161
  93. package/dist/node/tool/tool.event.js +1 -1
  94. package/dist/node/tool/tool.handler.js +479 -3
  95. package/dist/node/tool/tool.presentation.js +2 -2
  96. package/dist/node/ui/AgentDashboard.js +1816 -931
  97. package/dist/node/ui/AgentDashboard.visualizations.js +217 -0
  98. package/dist/node/ui/AgentRunList.js +360 -128
  99. package/dist/node/ui/AgentToolRegistry.js +9 -9
  100. package/dist/node/ui/hooks/index.js +611 -161
  101. package/dist/node/ui/hooks/useAgentList.js +1 -1
  102. package/dist/node/ui/hooks/useAgentMutations.js +444 -9
  103. package/dist/node/ui/hooks/useRunList.js +26 -11
  104. package/dist/node/ui/hooks/useToolList.js +1 -1
  105. package/dist/node/ui/index.js +2161 -1258
  106. package/dist/node/ui/modals/AgentActionsModal.js +13 -13
  107. package/dist/node/ui/modals/CreateAgentModal.js +15 -15
  108. package/dist/node/ui/modals/index.js +297 -297
  109. package/dist/node/ui/renderers/agent-list.markdown.js +14 -5
  110. package/dist/node/ui/renderers/agent-list.renderer.js +7 -7
  111. package/dist/node/ui/renderers/dashboard.markdown.js +207 -36
  112. package/dist/node/ui/renderers/index.js +359 -163
  113. package/dist/node/ui/renderers/run-list.markdown.js +9 -4
  114. package/dist/node/ui/renderers/tool-registry.markdown.js +15 -4
  115. package/dist/node/ui/views/AgentListView.js +7 -7
  116. package/dist/node/ui/views/RunDataTable.js +326 -0
  117. package/dist/node/ui/views/RunListView.js +360 -128
  118. package/dist/node/ui/views/ToolRegistryView.js +9 -9
  119. package/dist/node/ui/views/index.js +478 -246
  120. package/dist/node/ui/views/run-data-table.columns.js +271 -0
  121. package/dist/node/ui/views/run-list.shared.js +177 -0
  122. package/dist/node/visualizations/catalog.js +134 -0
  123. package/dist/node/visualizations/index.js +187 -0
  124. package/dist/node/visualizations/selectors.js +181 -0
  125. package/dist/presentations/index.d.ts +3 -5
  126. package/dist/presentations/index.js +51 -51
  127. package/dist/proof/index.d.ts +2 -0
  128. package/dist/proof/meetup-proof.d.ts +10 -0
  129. package/dist/proof/meetup-proof.runtime.d.ts +22 -0
  130. package/dist/proof/meetup-proof.scenario.d.ts +2 -0
  131. package/dist/proof/meetup-proof.suite.d.ts +1 -0
  132. package/dist/proof/meetup-proof.test.d.ts +1 -0
  133. package/dist/run/index.d.ts +7 -7
  134. package/dist/run/index.js +380 -374
  135. package/dist/run/run.event.js +2 -2
  136. package/dist/run/run.handler.d.ts +7 -0
  137. package/dist/run/run.handler.js +666 -1
  138. package/dist/run/run.presentation.js +2 -2
  139. package/dist/shared/demo-dashboard-data.d.ts +16 -0
  140. package/dist/shared/demo-runtime-seed.d.ts +17 -0
  141. package/dist/shared/demo-runtime.d.ts +8 -0
  142. package/dist/shared/demo-runtime.test.d.ts +1 -0
  143. package/dist/shared/index.d.ts +4 -1
  144. package/dist/shared/index.js +293 -1
  145. package/dist/shared/mock-runs.d.ts +4 -0
  146. package/dist/shared/mock-runs.js +5 -0
  147. package/dist/tool/index.d.ts +7 -7
  148. package/dist/tool/index.js +161 -161
  149. package/dist/tool/tool.event.js +1 -1
  150. package/dist/tool/tool.handler.d.ts +3 -0
  151. package/dist/tool/tool.handler.js +479 -3
  152. package/dist/tool/tool.presentation.js +2 -2
  153. package/dist/ui/AgentDashboard.js +1816 -931
  154. package/dist/ui/AgentDashboard.sandbox.test.d.ts +1 -0
  155. package/dist/ui/AgentDashboard.visualizations.d.ts +4 -0
  156. package/dist/ui/AgentDashboard.visualizations.js +218 -0
  157. package/dist/ui/AgentRunList.js +360 -128
  158. package/dist/ui/AgentToolRegistry.js +9 -9
  159. package/dist/ui/hooks/index.d.ts +4 -4
  160. package/dist/ui/hooks/index.js +611 -161
  161. package/dist/ui/hooks/useAgentList.d.ts +5 -0
  162. package/dist/ui/hooks/useAgentList.js +1 -1
  163. package/dist/ui/hooks/useAgentMutations.d.ts +9 -2
  164. package/dist/ui/hooks/useAgentMutations.js +444 -9
  165. package/dist/ui/hooks/useRunList.d.ts +13 -2
  166. package/dist/ui/hooks/useRunList.js +26 -11
  167. package/dist/ui/hooks/useToolList.d.ts +5 -0
  168. package/dist/ui/hooks/useToolList.js +1 -1
  169. package/dist/ui/index.d.ts +3 -3
  170. package/dist/ui/index.js +2161 -1258
  171. package/dist/ui/modals/AgentActionsModal.js +13 -13
  172. package/dist/ui/modals/CreateAgentModal.js +15 -15
  173. package/dist/ui/modals/index.d.ts +1 -1
  174. package/dist/ui/modals/index.js +297 -297
  175. package/dist/ui/renderers/agent-list.markdown.d.ts +5 -0
  176. package/dist/ui/renderers/agent-list.markdown.js +14 -5
  177. package/dist/ui/renderers/agent-list.renderer.js +7 -7
  178. package/dist/ui/renderers/dashboard.markdown.d.ts +5 -0
  179. package/dist/ui/renderers/dashboard.markdown.js +207 -36
  180. package/dist/ui/renderers/index.d.ts +2 -2
  181. package/dist/ui/renderers/index.js +359 -163
  182. package/dist/ui/renderers/run-list.markdown.d.ts +5 -0
  183. package/dist/ui/renderers/run-list.markdown.js +9 -4
  184. package/dist/ui/renderers/tool-registry.markdown.d.ts +6 -1
  185. package/dist/ui/renderers/tool-registry.markdown.js +15 -4
  186. package/dist/ui/views/AgentListView.js +7 -7
  187. package/dist/ui/views/RunDataTable.d.ts +18 -0
  188. package/dist/ui/views/RunDataTable.js +327 -0
  189. package/dist/ui/views/RunListView.js +360 -128
  190. package/dist/ui/views/ToolRegistryView.js +9 -9
  191. package/dist/ui/views/index.js +478 -246
  192. package/dist/ui/views/run-data-table.columns.d.ts +3 -0
  193. package/dist/ui/views/run-data-table.columns.js +272 -0
  194. package/dist/ui/views/run-list.shared.d.ts +14 -0
  195. package/dist/ui/views/run-list.shared.js +178 -0
  196. package/dist/visualizations/catalog.d.ts +10 -0
  197. package/dist/visualizations/catalog.js +135 -0
  198. package/dist/visualizations/index.d.ts +2 -0
  199. package/dist/visualizations/index.js +188 -0
  200. package/dist/visualizations/selectors.d.ts +3 -0
  201. package/dist/visualizations/selectors.js +182 -0
  202. package/dist/visualizations/selectors.test.d.ts +1 -0
  203. package/package.json +114 -12
  204. package/proofs/agent-console-meetup.replay.json +220 -0
  205. package/src/agent/agent.entity.ts +111 -111
  206. package/src/agent/agent.enum.ts +12 -12
  207. package/src/agent/agent.event.ts +91 -91
  208. package/src/agent/agent.handler.ts +144 -127
  209. package/src/agent/agent.operation.ts +400 -400
  210. package/src/agent/agent.presentation.ts +62 -62
  211. package/src/agent/agent.schema.ts +175 -175
  212. package/src/agent/agent.test-spec.ts +48 -48
  213. package/src/agent/index.ts +46 -51
  214. package/src/agent.capability.ts +11 -11
  215. package/src/agent.feature.ts +134 -131
  216. package/src/docs/agent-console.docblock.ts +52 -49
  217. package/src/example.test.ts +75 -0
  218. package/src/example.ts +34 -35
  219. package/src/handlers/agent.handlers.ts +576 -522
  220. package/src/handlers/index.ts +30 -14
  221. package/src/handlers/mock-handlers.test.ts +77 -0
  222. package/src/index.ts +10 -9
  223. package/src/presentations/index.ts +11 -13
  224. package/src/proof/index.ts +2 -0
  225. package/src/proof/meetup-proof.runtime.ts +196 -0
  226. package/src/proof/meetup-proof.scenario.ts +99 -0
  227. package/src/proof/meetup-proof.suite.ts +29 -0
  228. package/src/proof/meetup-proof.test.ts +28 -0
  229. package/src/proof/meetup-proof.ts +130 -0
  230. package/src/run/index.ts +49 -54
  231. package/src/run/run.entity.ts +137 -137
  232. package/src/run/run.enum.ts +18 -18
  233. package/src/run/run.event.ts +174 -174
  234. package/src/run/run.handler.ts +113 -96
  235. package/src/run/run.operation.ts +474 -474
  236. package/src/run/run.presentation.ts +42 -42
  237. package/src/run/run.schema.ts +126 -126
  238. package/src/run/run.test-spec.ts +48 -48
  239. package/src/seeders/index.ts +21 -21
  240. package/src/shared/demo-dashboard-data.ts +58 -0
  241. package/src/shared/demo-runtime-seed.ts +139 -0
  242. package/src/shared/demo-runtime.test.ts +169 -0
  243. package/src/shared/demo-runtime.ts +260 -0
  244. package/src/shared/index.ts +12 -1
  245. package/src/shared/mock-agents.ts +76 -76
  246. package/src/shared/mock-runs.ts +107 -102
  247. package/src/shared/mock-tools.ts +140 -140
  248. package/src/shared/overlay-types.ts +23 -23
  249. package/src/tool/index.ts +39 -44
  250. package/src/tool/tool.entity.ts +73 -73
  251. package/src/tool/tool.enum.ts +13 -13
  252. package/src/tool/tool.event.ts +80 -80
  253. package/src/tool/tool.handler.ts +124 -107
  254. package/src/tool/tool.operation.ts +328 -328
  255. package/src/tool/tool.presentation.ts +43 -43
  256. package/src/tool/tool.schema.ts +106 -106
  257. package/src/tool/tool.test-spec.ts +48 -48
  258. package/src/ui/AgentDashboard.sandbox.test.tsx +312 -0
  259. package/src/ui/AgentDashboard.tsx +351 -348
  260. package/src/ui/AgentDashboard.visualizations.tsx +35 -0
  261. package/src/ui/hooks/index.ts +7 -7
  262. package/src/ui/hooks/useAgentList.ts +57 -56
  263. package/src/ui/hooks/useAgentMutations.ts +168 -159
  264. package/src/ui/hooks/useRunList.ts +90 -57
  265. package/src/ui/hooks/useToolList.ts +102 -101
  266. package/src/ui/index.ts +6 -9
  267. package/src/ui/modals/AgentActionsModal.tsx +262 -262
  268. package/src/ui/modals/CreateAgentModal.tsx +232 -232
  269. package/src/ui/modals/index.ts +1 -1
  270. package/src/ui/overlays/demo-overlays.ts +52 -52
  271. package/src/ui/renderers/agent-list.markdown.ts +81 -61
  272. package/src/ui/renderers/agent-list.renderer.tsx +14 -14
  273. package/src/ui/renderers/dashboard.markdown.ts +135 -139
  274. package/src/ui/renderers/index.ts +3 -4
  275. package/src/ui/renderers/run-list.markdown.ts +56 -47
  276. package/src/ui/renderers/tool-registry.markdown.ts +79 -66
  277. package/src/ui/views/AgentListView.tsx +90 -90
  278. package/src/ui/views/RunDataTable.tsx +74 -0
  279. package/src/ui/views/RunListView.tsx +84 -158
  280. package/src/ui/views/ToolRegistryView.tsx +113 -113
  281. package/src/ui/views/run-data-table.columns.tsx +102 -0
  282. package/src/ui/views/run-list.shared.tsx +139 -0
  283. package/src/visualizations/catalog.ts +132 -0
  284. package/src/visualizations/index.ts +2 -0
  285. package/src/visualizations/selectors.test.ts +12 -0
  286. package/src/visualizations/selectors.ts +70 -0
  287. package/tsconfig.json +7 -8
  288. package/tsdown.config.js +24 -3
@@ -1,6 +1,6 @@
1
1
  import {
2
- StabilityEnum,
3
- definePresentation,
2
+ definePresentation,
3
+ StabilityEnum,
4
4
  } from '@contractspec/lib.contracts-spec';
5
5
  import { RunSummaryModel } from './run.schema';
6
6
 
@@ -8,50 +8,50 @@ import { RunSummaryModel } from './run.schema';
8
8
  * Presentation for displaying a list of agent runs.
9
9
  */
10
10
  export const RunListPresentation = definePresentation({
11
- meta: {
12
- key: 'agent-console.run.list',
13
- version: '1.0.0',
14
- title: 'Run List',
15
- description:
16
- 'List view of agent runs with status, tokens, and duration info',
17
- goal: 'Provide an overview of agent execution history and performance.',
18
- context: 'Run history dashboard.',
19
- domain: 'agent-console',
20
- owners: ['@agent-console-team'],
21
- tags: ['run', 'list', 'dashboard'],
22
- stability: StabilityEnum.Experimental,
23
- },
24
- source: {
25
- type: 'component',
26
- framework: 'react',
27
- componentKey: 'RunListView',
28
- props: RunSummaryModel,
29
- },
30
- targets: ['react', 'markdown', 'application/json'],
31
- policy: { flags: ['agent-console.enabled'] },
11
+ meta: {
12
+ key: 'agent-console.run.list',
13
+ version: '1.0.0',
14
+ title: 'Run List',
15
+ description:
16
+ 'List view of agent runs with status, tokens, and duration info',
17
+ goal: 'Provide an overview of agent execution history and performance.',
18
+ context: 'Run history dashboard.',
19
+ domain: 'agent-console',
20
+ owners: ['@agent-console-team'],
21
+ tags: ['run', 'list', 'dashboard'],
22
+ stability: StabilityEnum.Experimental,
23
+ },
24
+ source: {
25
+ type: 'component',
26
+ framework: 'react',
27
+ componentKey: 'RunListView',
28
+ props: RunSummaryModel,
29
+ },
30
+ targets: ['react', 'markdown', 'application/json'],
31
+ policy: { flags: ['agent-console.enabled'] },
32
32
  });
33
33
 
34
34
  /**
35
35
  * Presentation for run detail view.
36
36
  */
37
37
  export const RunDetailPresentation = definePresentation({
38
- meta: {
39
- key: 'agent-console.run.detail',
40
- version: '1.0.0',
41
- title: 'Run Details',
42
- description: 'Detailed view of an agent run with steps, logs, and metrics',
43
- goal: 'Allow users to inspect and debug a specific agent run.',
44
- context: 'Detailed view of an agent run.',
45
- domain: 'agent-console',
46
- owners: ['@agent-console-team'],
47
- tags: ['run', 'detail'],
48
- stability: StabilityEnum.Experimental,
49
- },
50
- source: {
51
- type: 'component',
52
- framework: 'react',
53
- componentKey: 'RunDetailView',
54
- },
55
- targets: ['react', 'markdown'],
56
- policy: { flags: ['agent-console.enabled'] },
38
+ meta: {
39
+ key: 'agent-console.run.detail',
40
+ version: '1.0.0',
41
+ title: 'Run Details',
42
+ description: 'Detailed view of an agent run with steps, logs, and metrics',
43
+ goal: 'Allow users to inspect and debug a specific agent run.',
44
+ context: 'Detailed view of an agent run.',
45
+ domain: 'agent-console',
46
+ owners: ['@agent-console-team'],
47
+ tags: ['run', 'detail'],
48
+ stability: StabilityEnum.Experimental,
49
+ },
50
+ source: {
51
+ type: 'component',
52
+ framework: 'react',
53
+ componentKey: 'RunDetailView',
54
+ },
55
+ targets: ['react', 'markdown'],
56
+ policy: { flags: ['agent-console.enabled'] },
57
57
  });
@@ -1,169 +1,169 @@
1
1
  import { defineSchemaModel, ScalarTypeEnum } from '@contractspec/lib.schema';
2
- import { RunStatusEnum, RunStepTypeEnum, LogLevelEnum } from './run.enum';
2
+ import { LogLevelEnum, RunStatusEnum, RunStepTypeEnum } from './run.enum';
3
3
 
4
4
  /**
5
5
  * Input data for agent execution.
6
6
  */
7
7
  export const RunInputModel = defineSchemaModel({
8
- name: 'RunInput',
9
- description: 'Input data for agent execution',
10
- fields: {
11
- message: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
12
- context: { type: ScalarTypeEnum.JSONObject(), isOptional: true },
13
- },
8
+ name: 'RunInput',
9
+ description: 'Input data for agent execution',
10
+ fields: {
11
+ message: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
12
+ context: { type: ScalarTypeEnum.JSONObject(), isOptional: true },
13
+ },
14
14
  });
15
15
 
16
16
  /**
17
17
  * Individual step within a run.
18
18
  */
19
19
  export const RunStepModel = defineSchemaModel({
20
- name: 'RunStep',
21
- description: 'Individual step within a run',
22
- fields: {
23
- id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
24
- stepNumber: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
25
- type: { type: RunStepTypeEnum, isOptional: false },
26
- toolId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
27
- toolName: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
28
- input: { type: ScalarTypeEnum.JSONObject(), isOptional: true },
29
- output: { type: ScalarTypeEnum.JSONObject(), isOptional: true },
30
- status: { type: RunStatusEnum, isOptional: false },
31
- errorMessage: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
32
- tokensUsed: {
33
- type: ScalarTypeEnum.Int_unsecure(),
34
- isOptional: false,
35
- defaultValue: 0,
36
- },
37
- durationMs: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },
38
- startedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },
39
- completedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },
40
- },
20
+ name: 'RunStep',
21
+ description: 'Individual step within a run',
22
+ fields: {
23
+ id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
24
+ stepNumber: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
25
+ type: { type: RunStepTypeEnum, isOptional: false },
26
+ toolId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
27
+ toolName: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
28
+ input: { type: ScalarTypeEnum.JSONObject(), isOptional: true },
29
+ output: { type: ScalarTypeEnum.JSONObject(), isOptional: true },
30
+ status: { type: RunStatusEnum, isOptional: false },
31
+ errorMessage: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
32
+ tokensUsed: {
33
+ type: ScalarTypeEnum.Int_unsecure(),
34
+ isOptional: false,
35
+ defaultValue: 0,
36
+ },
37
+ durationMs: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },
38
+ startedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },
39
+ completedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },
40
+ },
41
41
  });
42
42
 
43
43
  /**
44
44
  * Execution log entry.
45
45
  */
46
46
  export const RunLogModel = defineSchemaModel({
47
- name: 'RunLog',
48
- description: 'Execution log entry',
49
- fields: {
50
- id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
51
- stepId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
52
- level: { type: LogLevelEnum, isOptional: false },
53
- message: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
54
- data: { type: ScalarTypeEnum.JSONObject(), isOptional: true },
55
- source: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
56
- traceId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
57
- spanId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
58
- timestamp: { type: ScalarTypeEnum.DateTime(), isOptional: false },
59
- },
47
+ name: 'RunLog',
48
+ description: 'Execution log entry',
49
+ fields: {
50
+ id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
51
+ stepId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
52
+ level: { type: LogLevelEnum, isOptional: false },
53
+ message: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
54
+ data: { type: ScalarTypeEnum.JSONObject(), isOptional: true },
55
+ source: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
56
+ traceId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
57
+ spanId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
58
+ timestamp: { type: ScalarTypeEnum.DateTime(), isOptional: false },
59
+ },
60
60
  });
61
61
 
62
62
  /**
63
63
  * Agent reference in a run.
64
64
  */
65
65
  export const RunAgentRefModel = defineSchemaModel({
66
- name: 'RunAgentRef',
67
- description: 'Agent reference in a run',
68
- fields: {
69
- id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
70
- name: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
71
- modelProvider: {
72
- type: ScalarTypeEnum.String_unsecure(),
73
- isOptional: false,
74
- },
75
- modelName: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
76
- },
66
+ name: 'RunAgentRef',
67
+ description: 'Agent reference in a run',
68
+ fields: {
69
+ id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
70
+ name: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
71
+ modelProvider: {
72
+ type: ScalarTypeEnum.String_unsecure(),
73
+ isOptional: false,
74
+ },
75
+ modelName: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
76
+ },
77
77
  });
78
78
 
79
79
  /**
80
80
  * Agent execution instance.
81
81
  */
82
82
  export const RunModel = defineSchemaModel({
83
- name: 'Run',
84
- description: 'Agent execution instance',
85
- fields: {
86
- id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
87
- organizationId: {
88
- type: ScalarTypeEnum.String_unsecure(),
89
- isOptional: false,
90
- },
91
- agentId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
92
- userId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
93
- sessionId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
94
- input: { type: ScalarTypeEnum.JSONObject(), isOptional: false },
95
- output: { type: ScalarTypeEnum.JSONObject(), isOptional: true },
96
- status: { type: RunStatusEnum, isOptional: false },
97
- errorMessage: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
98
- errorCode: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
99
- totalTokens: {
100
- type: ScalarTypeEnum.Int_unsecure(),
101
- isOptional: false,
102
- defaultValue: 0,
103
- },
104
- promptTokens: {
105
- type: ScalarTypeEnum.Int_unsecure(),
106
- isOptional: false,
107
- defaultValue: 0,
108
- },
109
- completionTokens: {
110
- type: ScalarTypeEnum.Int_unsecure(),
111
- isOptional: false,
112
- defaultValue: 0,
113
- },
114
- totalIterations: {
115
- type: ScalarTypeEnum.Int_unsecure(),
116
- isOptional: false,
117
- defaultValue: 0,
118
- },
119
- durationMs: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },
120
- estimatedCostUsd: {
121
- type: ScalarTypeEnum.Float_unsecure(),
122
- isOptional: true,
123
- },
124
- queuedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },
125
- startedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },
126
- completedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },
127
- metadata: { type: ScalarTypeEnum.JSONObject(), isOptional: true },
128
- steps: { type: RunStepModel, isArray: true, isOptional: true },
129
- logs: { type: RunLogModel, isArray: true, isOptional: true },
130
- agent: { type: RunAgentRefModel, isOptional: true },
131
- },
83
+ name: 'Run',
84
+ description: 'Agent execution instance',
85
+ fields: {
86
+ id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
87
+ organizationId: {
88
+ type: ScalarTypeEnum.String_unsecure(),
89
+ isOptional: false,
90
+ },
91
+ agentId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
92
+ userId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
93
+ sessionId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
94
+ input: { type: ScalarTypeEnum.JSONObject(), isOptional: false },
95
+ output: { type: ScalarTypeEnum.JSONObject(), isOptional: true },
96
+ status: { type: RunStatusEnum, isOptional: false },
97
+ errorMessage: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
98
+ errorCode: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
99
+ totalTokens: {
100
+ type: ScalarTypeEnum.Int_unsecure(),
101
+ isOptional: false,
102
+ defaultValue: 0,
103
+ },
104
+ promptTokens: {
105
+ type: ScalarTypeEnum.Int_unsecure(),
106
+ isOptional: false,
107
+ defaultValue: 0,
108
+ },
109
+ completionTokens: {
110
+ type: ScalarTypeEnum.Int_unsecure(),
111
+ isOptional: false,
112
+ defaultValue: 0,
113
+ },
114
+ totalIterations: {
115
+ type: ScalarTypeEnum.Int_unsecure(),
116
+ isOptional: false,
117
+ defaultValue: 0,
118
+ },
119
+ durationMs: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },
120
+ estimatedCostUsd: {
121
+ type: ScalarTypeEnum.Float_unsecure(),
122
+ isOptional: true,
123
+ },
124
+ queuedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },
125
+ startedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },
126
+ completedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },
127
+ metadata: { type: ScalarTypeEnum.JSONObject(), isOptional: true },
128
+ steps: { type: RunStepModel, isArray: true, isOptional: true },
129
+ logs: { type: RunLogModel, isArray: true, isOptional: true },
130
+ agent: { type: RunAgentRefModel, isOptional: true },
131
+ },
132
132
  });
133
133
 
134
134
  /**
135
135
  * Summary of a run for list views.
136
136
  */
137
137
  export const RunSummaryModel = defineSchemaModel({
138
- name: 'RunSummary',
139
- description: 'Summary of a run for list views',
140
- fields: {
141
- id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
142
- agentId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
143
- agentName: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
144
- status: { type: RunStatusEnum, isOptional: false },
145
- totalTokens: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
146
- durationMs: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },
147
- estimatedCostUsd: {
148
- type: ScalarTypeEnum.Float_unsecure(),
149
- isOptional: true,
150
- },
151
- queuedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },
152
- completedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },
153
- },
138
+ name: 'RunSummary',
139
+ description: 'Summary of a run for list views',
140
+ fields: {
141
+ id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
142
+ agentId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
143
+ agentName: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
144
+ status: { type: RunStatusEnum, isOptional: false },
145
+ totalTokens: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
146
+ durationMs: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },
147
+ estimatedCostUsd: {
148
+ type: ScalarTypeEnum.Float_unsecure(),
149
+ isOptional: true,
150
+ },
151
+ queuedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },
152
+ completedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },
153
+ },
154
154
  });
155
155
 
156
156
  /**
157
157
  * Timeline data point for metrics.
158
158
  */
159
159
  export const TimelineDataPointModel = defineSchemaModel({
160
- name: 'TimelineDataPoint',
161
- description: 'Timeline data point for metrics',
162
- fields: {
163
- period: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
164
- runs: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
165
- tokens: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
166
- costUsd: { type: ScalarTypeEnum.Float_unsecure(), isOptional: false },
167
- avgDurationMs: { type: ScalarTypeEnum.Float_unsecure(), isOptional: false },
168
- },
160
+ name: 'TimelineDataPoint',
161
+ description: 'Timeline data point for metrics',
162
+ fields: {
163
+ period: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
164
+ runs: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
165
+ tokens: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
166
+ costUsd: { type: ScalarTypeEnum.Float_unsecure(), isOptional: false },
167
+ avgDurationMs: { type: ScalarTypeEnum.Float_unsecure(), isOptional: false },
168
+ },
169
169
  });
@@ -1,55 +1,55 @@
1
1
  import { defineTestSpec } from '@contractspec/lib.contracts-spec/tests';
2
2
 
3
3
  export const runListTest = defineTestSpec({
4
- meta: {
5
- key: 'test.agent.run.list',
6
- version: '1.0.0',
7
- owners: ['@agent-console-team'],
8
- description: 'Test for listing runs',
9
- stability: 'stable',
10
- tags: ['test'],
11
- },
12
- target: {
13
- type: 'operation',
14
- operation: { key: 'agent.run.list', version: '1.0.0' },
15
- },
16
- scenarios: [
17
- {
18
- key: 'success',
19
- when: { operation: { key: 'agent.run.list' } },
20
- then: [{ type: 'expectOutput', match: {} }],
21
- },
22
- {
23
- key: 'error',
24
- when: { operation: { key: 'agent.run.list' } },
25
- then: [{ type: 'expectError' }],
26
- },
27
- ],
4
+ meta: {
5
+ key: 'test.agent.run.list',
6
+ version: '1.0.0',
7
+ owners: ['@agent-console-team'],
8
+ description: 'Test for listing runs',
9
+ stability: 'stable',
10
+ tags: ['test'],
11
+ },
12
+ target: {
13
+ type: 'operation',
14
+ operation: { key: 'agent.run.list', version: '1.0.0' },
15
+ },
16
+ scenarios: [
17
+ {
18
+ key: 'success',
19
+ when: { operation: { key: 'agent.run.list' } },
20
+ then: [{ type: 'expectOutput', match: {} }],
21
+ },
22
+ {
23
+ key: 'error',
24
+ when: { operation: { key: 'agent.run.list' } },
25
+ then: [{ type: 'expectError' }],
26
+ },
27
+ ],
28
28
  });
29
29
 
30
30
  export const runGetTest = defineTestSpec({
31
- meta: {
32
- key: 'test.agent.run.get',
33
- version: '1.0.0',
34
- owners: ['@agent-console-team'],
35
- description: 'Test for getting run',
36
- stability: 'stable',
37
- tags: ['test'],
38
- },
39
- target: {
40
- type: 'operation',
41
- operation: { key: 'agent.run.get', version: '1.0.0' },
42
- },
43
- scenarios: [
44
- {
45
- key: 'success',
46
- when: { operation: { key: 'agent.run.get' } },
47
- then: [{ type: 'expectOutput', match: {} }],
48
- },
49
- {
50
- key: 'error',
51
- when: { operation: { key: 'agent.run.get' } },
52
- then: [{ type: 'expectError' }],
53
- },
54
- ],
31
+ meta: {
32
+ key: 'test.agent.run.get',
33
+ version: '1.0.0',
34
+ owners: ['@agent-console-team'],
35
+ description: 'Test for getting run',
36
+ stability: 'stable',
37
+ tags: ['test'],
38
+ },
39
+ target: {
40
+ type: 'operation',
41
+ operation: { key: 'agent.run.get', version: '1.0.0' },
42
+ },
43
+ scenarios: [
44
+ {
45
+ key: 'success',
46
+ when: { operation: { key: 'agent.run.get' } },
47
+ then: [{ type: 'expectOutput', match: {} }],
48
+ },
49
+ {
50
+ key: 'error',
51
+ when: { operation: { key: 'agent.run.get' } },
52
+ then: [{ type: 'expectError' }],
53
+ },
54
+ ],
55
55
  });
@@ -1,29 +1,29 @@
1
1
  import type { DatabasePort } from '@contractspec/lib.runtime-sandbox';
2
2
 
3
3
  export async function seedAgentConsole(params: {
4
- projectId: string;
5
- db: DatabasePort;
4
+ projectId: string;
5
+ db: DatabasePort;
6
6
  }) {
7
- const { projectId, db } = params;
7
+ const { projectId, db } = params;
8
8
 
9
- const existing = await db.query(
10
- `SELECT COUNT(*) as count FROM agent_definition WHERE "projectId" = $1`,
11
- [projectId]
12
- );
13
- if ((existing.rows[0]?.count as number) > 0) return;
9
+ const existing = await db.query(
10
+ `SELECT COUNT(*) as count FROM agent_definition WHERE "projectId" = $1`,
11
+ [projectId]
12
+ );
13
+ if ((existing.rows[0]?.count as number) > 0) return;
14
14
 
15
- await db.execute(
16
- `INSERT INTO agent_definition (id, "projectId", "organizationId", name, description, "modelProvider", "modelName", status)
15
+ await db.execute(
16
+ `INSERT INTO agent_definition (id, "projectId", "organizationId", name, description, "modelProvider", "modelName", status)
17
17
  VALUES ($1, $2, $3, $4, $5, $6, $7, $8)`,
18
- [
19
- 'agent_1',
20
- projectId,
21
- 'org_demo',
22
- 'Demo Agent',
23
- 'A demo AI agent',
24
- 'openai',
25
- 'gpt-4',
26
- 'ACTIVE',
27
- ]
28
- );
18
+ [
19
+ 'agent_1',
20
+ projectId,
21
+ 'org_demo',
22
+ 'Demo Agent',
23
+ 'A demo AI agent',
24
+ 'openai',
25
+ 'gpt-4',
26
+ 'ACTIVE',
27
+ ]
28
+ );
29
29
  }
@@ -0,0 +1,58 @@
1
+ import type { AgentHandlers } from '../handlers/agent.handlers';
2
+ import { createAgentConsoleDemoHandlers } from './demo-runtime';
3
+ import {
4
+ AGENT_CONSOLE_DEMO_ORGANIZATION_ID,
5
+ AGENT_CONSOLE_DEMO_PROJECT_ID,
6
+ } from './demo-runtime-seed';
7
+
8
+ export interface AgentConsoleDashboardData {
9
+ agents: Awaited<ReturnType<AgentHandlers['listAgents']>>['items'];
10
+ runs: Awaited<ReturnType<AgentHandlers['listRuns']>>['items'];
11
+ tools: Awaited<ReturnType<AgentHandlers['listTools']>>['items'];
12
+ summary: {
13
+ totalAgents: number;
14
+ totalRuns: number;
15
+ totalTools: number;
16
+ };
17
+ }
18
+
19
+ export async function getAgentConsoleDashboardData(
20
+ handlers: AgentHandlers,
21
+ params: { projectId: string; organizationId?: string }
22
+ ): Promise<AgentConsoleDashboardData> {
23
+ const organizationId =
24
+ params.organizationId ?? AGENT_CONSOLE_DEMO_ORGANIZATION_ID;
25
+ const [agentsResult, runsResult, toolsResult] = await Promise.all([
26
+ handlers.listAgents({
27
+ projectId: params.projectId,
28
+ organizationId,
29
+ limit: 10,
30
+ }),
31
+ handlers.listRuns({ projectId: params.projectId, limit: 10 }),
32
+ handlers.listTools({
33
+ projectId: params.projectId,
34
+ organizationId,
35
+ limit: 10,
36
+ }),
37
+ ]);
38
+
39
+ return {
40
+ agents: agentsResult.items,
41
+ runs: runsResult.items,
42
+ tools: toolsResult.items,
43
+ summary: {
44
+ totalAgents: agentsResult.total,
45
+ totalRuns: runsResult.total,
46
+ totalTools: toolsResult.total,
47
+ },
48
+ };
49
+ }
50
+
51
+ export async function getFallbackAgentConsoleDashboardData() {
52
+ const handlers = createAgentConsoleDemoHandlers({
53
+ projectId: AGENT_CONSOLE_DEMO_PROJECT_ID,
54
+ });
55
+ return getAgentConsoleDashboardData(handlers, {
56
+ projectId: AGENT_CONSOLE_DEMO_PROJECT_ID,
57
+ });
58
+ }