@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
@@ -171,8 +171,8 @@ var TimelineDataPointModel = defineSchemaModel({
171
171
 
172
172
  // src/run/run.presentation.ts
173
173
  import {
174
- StabilityEnum,
175
- definePresentation
174
+ definePresentation,
175
+ StabilityEnum
176
176
  } from "@contractspec/lib.contracts-spec";
177
177
  var RunListPresentation = definePresentation({
178
178
  meta: {
@@ -227,6 +227,7 @@ var MOCK_RUNS = [
227
227
  {
228
228
  id: "run-1",
229
229
  organizationId: "demo-org",
230
+ projectId: "demo-project",
230
231
  agentId: "agent-1",
231
232
  agentName: "Customer Support Bot",
232
233
  userId: "user-1",
@@ -249,6 +250,7 @@ var MOCK_RUNS = [
249
250
  {
250
251
  id: "run-2",
251
252
  organizationId: "demo-org",
253
+ projectId: "demo-project",
252
254
  agentId: "agent-2",
253
255
  agentName: "Code Review Assistant",
254
256
  userId: "user-2",
@@ -266,6 +268,7 @@ var MOCK_RUNS = [
266
268
  {
267
269
  id: "run-3",
268
270
  organizationId: "demo-org",
271
+ projectId: "demo-project",
269
272
  agentId: "agent-1",
270
273
  agentName: "Customer Support Bot",
271
274
  userId: "user-1",
@@ -287,6 +290,7 @@ var MOCK_RUNS = [
287
290
  {
288
291
  id: "run-4",
289
292
  organizationId: "demo-org",
293
+ projectId: "demo-project",
290
294
  agentId: "agent-3",
291
295
  agentName: "Data Analyst",
292
296
  userId: "user-3",
@@ -308,6 +312,7 @@ var MOCK_RUNS = [
308
312
  {
309
313
  id: "run-5",
310
314
  organizationId: "demo-org",
315
+ projectId: "demo-project",
311
316
  agentId: "agent-2",
312
317
  agentName: "Code Review Assistant",
313
318
  userId: "user-2",
@@ -327,8 +332,295 @@ var MOCK_RUNS = [
327
332
  logs: []
328
333
  }
329
334
  ];
335
+
336
+ // src/shared/demo-runtime-seed.ts
337
+ var AGENT_CONSOLE_DEMO_ORGANIZATION_ID = "demo-org";
338
+ var AGENT_CONSOLE_DEMO_PROJECT_ID = "agent-console-demo";
339
+ function slugify(name) {
340
+ return name.toLowerCase().trim().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
341
+ }
342
+ function cloneAgent(agent) {
343
+ return { ...agent };
344
+ }
345
+ function cloneTool(tool) {
346
+ return { ...tool };
347
+ }
348
+ function cloneRun(run) {
349
+ return { ...run };
350
+ }
351
+ function createDefaultNow() {
352
+ let tick = 0;
353
+ const base = Date.parse("2026-03-20T09:00:00.000Z");
354
+ return () => new Date(base + tick++ * 60000);
355
+ }
356
+ function normalizeProvider(provider) {
357
+ return provider.toLowerCase();
358
+ }
359
+ function normalizeRunStatus(status) {
360
+ return status === "IN_PROGRESS" ? "RUNNING" : status;
361
+ }
362
+ function createSeedState(projectId, organizationId) {
363
+ const agents = MOCK_AGENTS.map((agent) => ({
364
+ id: agent.id,
365
+ projectId,
366
+ organizationId,
367
+ name: agent.name,
368
+ slug: agent.slug,
369
+ description: agent.description,
370
+ modelProvider: normalizeProvider(agent.modelProvider),
371
+ modelName: agent.modelName,
372
+ systemPrompt: agent.systemPrompt,
373
+ temperature: typeof agent.modelConfig?.temperature === "number" ? agent.modelConfig.temperature : 0.4,
374
+ maxTokens: 8192,
375
+ status: agent.status,
376
+ createdAt: agent.createdAt,
377
+ updatedAt: agent.updatedAt
378
+ }));
379
+ const tools = MOCK_TOOLS.map((tool) => ({
380
+ id: tool.id,
381
+ projectId,
382
+ organizationId,
383
+ name: tool.name,
384
+ description: tool.description,
385
+ version: tool.version,
386
+ category: tool.category,
387
+ status: tool.status,
388
+ inputSchema: JSON.stringify(tool.parametersSchema),
389
+ outputSchema: tool.outputSchema ? JSON.stringify(tool.outputSchema) : undefined,
390
+ endpoint: typeof tool.implementationConfig?.url === "string" ? tool.implementationConfig.url : undefined,
391
+ createdAt: tool.createdAt,
392
+ updatedAt: tool.updatedAt
393
+ }));
394
+ const agentNames = new Map(agents.map((agent) => [agent.id, agent.name]));
395
+ const runs = MOCK_RUNS.map((run) => ({
396
+ id: run.id,
397
+ projectId,
398
+ agentId: run.agentId,
399
+ agentName: agentNames.get(run.agentId) ?? run.agentName ?? "Unknown agent",
400
+ status: normalizeRunStatus(run.status),
401
+ input: JSON.stringify(run.input),
402
+ output: run.output ? JSON.stringify(run.output) : undefined,
403
+ totalTokens: run.totalTokens,
404
+ promptTokens: run.promptTokens,
405
+ completionTokens: run.completionTokens,
406
+ estimatedCostUsd: run.estimatedCostUsd ?? 0,
407
+ durationMs: run.durationMs,
408
+ errorMessage: run.errorMessage,
409
+ queuedAt: run.queuedAt,
410
+ startedAt: run.startedAt,
411
+ completedAt: run.completedAt
412
+ }));
413
+ return { agents, tools, runs };
414
+ }
415
+ function summarizeRunMetrics(runs) {
416
+ const totalRuns = runs.length;
417
+ const completedRuns = runs.filter((run) => run.status === "COMPLETED").length;
418
+ const completedDurations = runs.map((run) => run.durationMs).filter((duration) => typeof duration === "number");
419
+ return {
420
+ totalRuns,
421
+ successRate: totalRuns === 0 ? 0 : completedRuns / totalRuns,
422
+ averageDurationMs: completedDurations.length === 0 ? 0 : Math.round(completedDurations.reduce((sum, duration) => sum + duration, 0) / completedDurations.length),
423
+ totalTokens: runs.reduce((sum, run) => sum + run.totalTokens, 0),
424
+ totalCostUsd: runs.reduce((sum, run) => sum + run.estimatedCostUsd, 0)
425
+ };
426
+ }
427
+
428
+ // src/shared/demo-runtime.ts
429
+ function createAgentConsoleDemoHandlers(options) {
430
+ const projectId = options.projectId;
431
+ const organizationId = options.organizationId ?? AGENT_CONSOLE_DEMO_ORGANIZATION_ID;
432
+ const now = options.now ?? createDefaultNow();
433
+ const state = createSeedState(projectId, organizationId);
434
+ let agentIndex = state.agents.length + 1;
435
+ let runIndex = state.runs.length + 1;
436
+ const nextId = (kind) => {
437
+ const nextIndex = kind === "agent" ? agentIndex++ : runIndex++;
438
+ return options.idFactory?.(kind, nextIndex) ?? `${kind}-demo-${nextIndex}`;
439
+ };
440
+ return {
441
+ async listAgents(input) {
442
+ const filtered = state.agents.filter((agent) => agent.projectId === input.projectId).filter((agent) => !input.organizationId || agent.organizationId === input.organizationId).filter((agent) => !input.status || input.status === "all" || agent.status === input.status).filter((agent) => {
443
+ if (!input.search)
444
+ return true;
445
+ const query = input.search.toLowerCase();
446
+ return agent.name.toLowerCase().includes(query) || (agent.description ?? "").toLowerCase().includes(query);
447
+ }).sort((left, right) => right.updatedAt.getTime() - left.updatedAt.getTime());
448
+ const limit = input.limit ?? 20;
449
+ const offset = input.offset ?? 0;
450
+ const items = filtered.slice(offset, offset + limit).map(cloneAgent);
451
+ return {
452
+ items,
453
+ total: filtered.length,
454
+ hasMore: offset + items.length < filtered.length
455
+ };
456
+ },
457
+ async getAgent(id) {
458
+ const agent = state.agents.find((item) => item.id === id);
459
+ return agent ? cloneAgent(agent) : null;
460
+ },
461
+ async createAgent(input, context) {
462
+ const name = input.name.trim();
463
+ const slug = slugify(name);
464
+ const duplicate = state.agents.find((agent2) => agent2.projectId === context.projectId && agent2.organizationId === context.organizationId && (agent2.slug === slug || agent2.name.toLowerCase() === name.toLowerCase()));
465
+ if (duplicate)
466
+ throw new Error("AGENT_NAME_OR_SLUG_EXISTS");
467
+ const timestamp = now();
468
+ const agent = {
469
+ id: nextId("agent"),
470
+ projectId: context.projectId,
471
+ organizationId: context.organizationId,
472
+ name,
473
+ slug,
474
+ description: input.description,
475
+ modelProvider: input.modelProvider ?? "openai",
476
+ modelName: input.modelName ?? "gpt-5.4",
477
+ systemPrompt: input.systemPrompt,
478
+ temperature: input.temperature ?? 0.4,
479
+ maxTokens: input.maxTokens ?? 8192,
480
+ status: "DRAFT",
481
+ createdAt: timestamp,
482
+ updatedAt: timestamp
483
+ };
484
+ state.agents.unshift(agent);
485
+ return cloneAgent(agent);
486
+ },
487
+ async updateAgent(input) {
488
+ const agent = state.agents.find((item) => item.id === input.id);
489
+ if (!agent)
490
+ throw new Error("AGENT_NOT_FOUND");
491
+ const nextName = input.name;
492
+ if (nextName && slugify(nextName) !== agent.slug) {
493
+ const duplicate = state.agents.find((item) => item.id !== agent.id && item.projectId === agent.projectId && item.organizationId === agent.organizationId && (item.slug === slugify(nextName) || item.name.toLowerCase() === nextName.toLowerCase()));
494
+ if (duplicate)
495
+ throw new Error("AGENT_NAME_OR_SLUG_EXISTS");
496
+ agent.slug = slugify(nextName);
497
+ agent.name = nextName;
498
+ }
499
+ if (input.description !== undefined)
500
+ agent.description = input.description;
501
+ if (input.status)
502
+ agent.status = input.status;
503
+ agent.updatedAt = now();
504
+ return cloneAgent(agent);
505
+ },
506
+ async executeAgent(input) {
507
+ const agent = state.agents.find((item) => item.id === input.agentId);
508
+ if (!agent)
509
+ throw new Error("AGENT_NOT_FOUND");
510
+ if (agent.status !== "ACTIVE")
511
+ throw new Error("AGENT_NOT_ACTIVE");
512
+ const queuedAt = now();
513
+ const startedAt = now();
514
+ const completedAt = now();
515
+ const durationMs = 2200 + input.message.length * 12;
516
+ const promptTokens = 600 + input.message.length * 3;
517
+ const completionTokens = 240 + agent.name.length * 4;
518
+ const run = {
519
+ id: nextId("run"),
520
+ projectId: input.context?.projectId ?? agent.projectId,
521
+ agentId: agent.id,
522
+ agentName: agent.name,
523
+ status: "COMPLETED",
524
+ input: input.message,
525
+ output: `Deterministic demo reply from ${agent.name}: ${input.message}`,
526
+ totalTokens: promptTokens + completionTokens,
527
+ promptTokens,
528
+ completionTokens,
529
+ estimatedCostUsd: Number(((promptTokens + completionTokens) / 1e6).toFixed(4)),
530
+ durationMs,
531
+ queuedAt,
532
+ startedAt,
533
+ completedAt
534
+ };
535
+ state.runs.unshift(run);
536
+ return cloneRun(run);
537
+ },
538
+ async listTools(input) {
539
+ const filtered = state.tools.filter((tool) => tool.projectId === input.projectId).filter((tool) => !input.organizationId || tool.organizationId === input.organizationId).filter((tool) => !input.category || input.category === "all" || tool.category === input.category).filter((tool) => !input.status || input.status === "all" || tool.status === input.status).filter((tool) => {
540
+ if (!input.search)
541
+ return true;
542
+ const query = input.search.toLowerCase();
543
+ return tool.name.toLowerCase().includes(query) || (tool.description ?? "").toLowerCase().includes(query);
544
+ }).sort((left, right) => left.name.localeCompare(right.name));
545
+ const limit = input.limit ?? 50;
546
+ const offset = input.offset ?? 0;
547
+ const items = filtered.slice(offset, offset + limit).map(cloneTool);
548
+ return {
549
+ items,
550
+ total: filtered.length,
551
+ hasMore: offset + items.length < filtered.length
552
+ };
553
+ },
554
+ async listRuns(input) {
555
+ const filtered = state.runs.filter((run) => run.projectId === input.projectId).filter((run) => !input.agentId || run.agentId === input.agentId).filter((run) => !input.status || input.status === "all" || run.status === input.status).sort((left, right) => right.queuedAt.getTime() - left.queuedAt.getTime());
556
+ const limit = input.limit ?? 20;
557
+ const offset = input.offset ?? 0;
558
+ const items = filtered.slice(offset, offset + limit).map(cloneRun);
559
+ return {
560
+ items,
561
+ total: filtered.length,
562
+ hasMore: offset + items.length < filtered.length
563
+ };
564
+ },
565
+ async getRunMetrics(input) {
566
+ const filtered = state.runs.filter((run) => {
567
+ if (run.projectId !== input.projectId)
568
+ return false;
569
+ if (input.agentId && run.agentId !== input.agentId)
570
+ return false;
571
+ if (input.startDate && run.queuedAt < input.startDate)
572
+ return false;
573
+ if (input.endDate && run.queuedAt > input.endDate)
574
+ return false;
575
+ return true;
576
+ });
577
+ return summarizeRunMetrics(filtered);
578
+ }
579
+ };
580
+ }
581
+
582
+ // src/shared/demo-dashboard-data.ts
583
+ async function getAgentConsoleDashboardData(handlers, params) {
584
+ const organizationId = params.organizationId ?? AGENT_CONSOLE_DEMO_ORGANIZATION_ID;
585
+ const [agentsResult, runsResult, toolsResult] = await Promise.all([
586
+ handlers.listAgents({
587
+ projectId: params.projectId,
588
+ organizationId,
589
+ limit: 10
590
+ }),
591
+ handlers.listRuns({ projectId: params.projectId, limit: 10 }),
592
+ handlers.listTools({
593
+ projectId: params.projectId,
594
+ organizationId,
595
+ limit: 10
596
+ })
597
+ ]);
598
+ return {
599
+ agents: agentsResult.items,
600
+ runs: runsResult.items,
601
+ tools: toolsResult.items,
602
+ summary: {
603
+ totalAgents: agentsResult.total,
604
+ totalRuns: runsResult.total,
605
+ totalTools: toolsResult.total
606
+ }
607
+ };
608
+ }
609
+ async function getFallbackAgentConsoleDashboardData() {
610
+ const handlers = createAgentConsoleDemoHandlers({
611
+ projectId: AGENT_CONSOLE_DEMO_PROJECT_ID
612
+ });
613
+ return getAgentConsoleDashboardData(handlers, {
614
+ projectId: AGENT_CONSOLE_DEMO_PROJECT_ID
615
+ });
616
+ }
330
617
  export {
618
+ getFallbackAgentConsoleDashboardData,
619
+ getAgentConsoleDashboardData,
620
+ createAgentConsoleDemoHandlers,
331
621
  MOCK_TOOLS,
332
622
  MOCK_RUNS,
333
- MOCK_AGENTS
623
+ MOCK_AGENTS,
624
+ AGENT_CONSOLE_DEMO_PROJECT_ID,
625
+ AGENT_CONSOLE_DEMO_ORGANIZATION_ID
334
626
  };
@@ -3,6 +3,7 @@ var MOCK_RUNS = [
3
3
  {
4
4
  id: "run-1",
5
5
  organizationId: "demo-org",
6
+ projectId: "demo-project",
6
7
  agentId: "agent-1",
7
8
  agentName: "Customer Support Bot",
8
9
  userId: "user-1",
@@ -25,6 +26,7 @@ var MOCK_RUNS = [
25
26
  {
26
27
  id: "run-2",
27
28
  organizationId: "demo-org",
29
+ projectId: "demo-project",
28
30
  agentId: "agent-2",
29
31
  agentName: "Code Review Assistant",
30
32
  userId: "user-2",
@@ -42,6 +44,7 @@ var MOCK_RUNS = [
42
44
  {
43
45
  id: "run-3",
44
46
  organizationId: "demo-org",
47
+ projectId: "demo-project",
45
48
  agentId: "agent-1",
46
49
  agentName: "Customer Support Bot",
47
50
  userId: "user-1",
@@ -63,6 +66,7 @@ var MOCK_RUNS = [
63
66
  {
64
67
  id: "run-4",
65
68
  organizationId: "demo-org",
69
+ projectId: "demo-project",
66
70
  agentId: "agent-3",
67
71
  agentName: "Data Analyst",
68
72
  userId: "user-3",
@@ -84,6 +88,7 @@ var MOCK_RUNS = [
84
88
  {
85
89
  id: "run-5",
86
90
  organizationId: "demo-org",
91
+ projectId: "demo-project",
87
92
  agentId: "agent-2",
88
93
  agentName: "Code Review Assistant",
89
94
  userId: "user-2",