@contractspec/example.agent-console 3.7.7 → 3.8.4

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 (191) hide show
  1. package/.turbo/turbo-build.log +126 -105
  2. package/AGENTS.md +3 -1
  3. package/CHANGELOG.md +57 -0
  4. package/README.md +46 -9
  5. package/dist/agent/agent.handler.d.ts +3 -0
  6. package/dist/agent/agent.handler.js +730 -1
  7. package/dist/agent/index.js +73 -72
  8. package/dist/agent.feature.js +179 -0
  9. package/dist/browser/agent/agent.handler.js +730 -1
  10. package/dist/browser/agent/index.js +73 -72
  11. package/dist/browser/agent.feature.js +179 -0
  12. package/dist/browser/docs/agent-console.docblock.js +11 -8
  13. package/dist/browser/docs/index.js +11 -8
  14. package/dist/browser/example.js +2 -3
  15. package/dist/browser/handlers/agent.handlers.js +1883 -2
  16. package/dist/browser/handlers/index.js +2142 -8
  17. package/dist/browser/index.js +3347 -2433
  18. package/dist/browser/presentations/index.js +49 -49
  19. package/dist/browser/run/index.js +818 -812
  20. package/dist/browser/run/run.handler.js +666 -1
  21. package/dist/browser/shared/index.js +293 -1
  22. package/dist/browser/shared/mock-runs.js +5 -0
  23. package/dist/browser/tool/index.js +331 -331
  24. package/dist/browser/tool/tool.handler.js +479 -3
  25. package/dist/browser/ui/AgentDashboard.js +1204 -319
  26. package/dist/browser/ui/AgentDashboard.visualizations.js +217 -0
  27. package/dist/browser/ui/AgentRunList.js +359 -127
  28. package/dist/browser/ui/hooks/index.js +468 -18
  29. package/dist/browser/ui/hooks/useAgentMutations.js +443 -8
  30. package/dist/browser/ui/hooks/useRunList.js +25 -10
  31. package/dist/browser/ui/index.js +1293 -390
  32. package/dist/browser/ui/renderers/agent-list.markdown.js +14 -5
  33. package/dist/browser/ui/renderers/dashboard.markdown.js +207 -36
  34. package/dist/browser/ui/renderers/index.js +245 -49
  35. package/dist/browser/ui/renderers/run-list.markdown.js +9 -4
  36. package/dist/browser/ui/renderers/tool-registry.markdown.js +15 -4
  37. package/dist/browser/ui/views/RunDataTable.js +326 -0
  38. package/dist/browser/ui/views/RunListView.js +359 -127
  39. package/dist/browser/ui/views/index.js +406 -174
  40. package/dist/browser/ui/views/run-data-table.columns.js +271 -0
  41. package/dist/browser/ui/views/run-list.shared.js +177 -0
  42. package/dist/browser/visualizations/catalog.js +134 -0
  43. package/dist/browser/visualizations/index.js +187 -0
  44. package/dist/browser/visualizations/selectors.js +181 -0
  45. package/dist/docs/agent-console.docblock.js +11 -8
  46. package/dist/docs/index.js +11 -8
  47. package/dist/example.js +2 -3
  48. package/dist/example.test.d.ts +1 -0
  49. package/dist/handlers/agent.handlers.d.ts +2 -0
  50. package/dist/handlers/agent.handlers.js +1883 -2
  51. package/dist/handlers/index.d.ts +1 -3
  52. package/dist/handlers/index.js +2142 -8
  53. package/dist/handlers/mock-handlers.test.d.ts +1 -0
  54. package/dist/index.d.ts +2 -0
  55. package/dist/index.js +3347 -2433
  56. package/dist/node/agent/agent.handler.js +730 -1
  57. package/dist/node/agent/index.js +73 -72
  58. package/dist/node/agent.feature.js +179 -0
  59. package/dist/node/docs/agent-console.docblock.js +11 -8
  60. package/dist/node/docs/index.js +11 -8
  61. package/dist/node/example.js +2 -3
  62. package/dist/node/handlers/agent.handlers.js +1883 -2
  63. package/dist/node/handlers/index.js +2142 -8
  64. package/dist/node/index.js +3347 -2433
  65. package/dist/node/presentations/index.js +49 -49
  66. package/dist/node/run/index.js +818 -812
  67. package/dist/node/run/run.handler.js +666 -1
  68. package/dist/node/shared/index.js +293 -1
  69. package/dist/node/shared/mock-runs.js +5 -0
  70. package/dist/node/tool/index.js +331 -331
  71. package/dist/node/tool/tool.handler.js +479 -3
  72. package/dist/node/ui/AgentDashboard.js +1204 -319
  73. package/dist/node/ui/AgentDashboard.visualizations.js +217 -0
  74. package/dist/node/ui/AgentRunList.js +359 -127
  75. package/dist/node/ui/hooks/index.js +468 -18
  76. package/dist/node/ui/hooks/useAgentMutations.js +443 -8
  77. package/dist/node/ui/hooks/useRunList.js +25 -10
  78. package/dist/node/ui/index.js +1293 -390
  79. package/dist/node/ui/renderers/agent-list.markdown.js +14 -5
  80. package/dist/node/ui/renderers/dashboard.markdown.js +207 -36
  81. package/dist/node/ui/renderers/index.js +245 -49
  82. package/dist/node/ui/renderers/run-list.markdown.js +9 -4
  83. package/dist/node/ui/renderers/tool-registry.markdown.js +15 -4
  84. package/dist/node/ui/views/RunDataTable.js +326 -0
  85. package/dist/node/ui/views/RunListView.js +359 -127
  86. package/dist/node/ui/views/index.js +406 -174
  87. package/dist/node/ui/views/run-data-table.columns.js +271 -0
  88. package/dist/node/ui/views/run-list.shared.js +177 -0
  89. package/dist/node/visualizations/catalog.js +134 -0
  90. package/dist/node/visualizations/index.js +187 -0
  91. package/dist/node/visualizations/selectors.js +181 -0
  92. package/dist/presentations/index.js +49 -49
  93. package/dist/proof/index.d.ts +2 -0
  94. package/dist/proof/meetup-proof.d.ts +10 -0
  95. package/dist/proof/meetup-proof.runtime.d.ts +22 -0
  96. package/dist/proof/meetup-proof.scenario.d.ts +2 -0
  97. package/dist/proof/meetup-proof.suite.d.ts +1 -0
  98. package/dist/proof/meetup-proof.test.d.ts +1 -0
  99. package/dist/run/index.js +818 -812
  100. package/dist/run/run.handler.d.ts +4 -0
  101. package/dist/run/run.handler.js +666 -1
  102. package/dist/shared/demo-dashboard-data.d.ts +16 -0
  103. package/dist/shared/demo-runtime-seed.d.ts +17 -0
  104. package/dist/shared/demo-runtime.d.ts +8 -0
  105. package/dist/shared/demo-runtime.test.d.ts +1 -0
  106. package/dist/shared/index.d.ts +3 -0
  107. package/dist/shared/index.js +293 -1
  108. package/dist/shared/mock-runs.d.ts +4 -0
  109. package/dist/shared/mock-runs.js +5 -0
  110. package/dist/tool/index.js +331 -331
  111. package/dist/tool/tool.handler.d.ts +4 -1
  112. package/dist/tool/tool.handler.js +479 -3
  113. package/dist/ui/AgentDashboard.js +1204 -319
  114. package/dist/ui/AgentDashboard.sandbox.test.d.ts +1 -0
  115. package/dist/ui/AgentDashboard.visualizations.d.ts +4 -0
  116. package/dist/ui/AgentDashboard.visualizations.js +218 -0
  117. package/dist/ui/AgentRunList.js +359 -127
  118. package/dist/ui/hooks/index.js +468 -18
  119. package/dist/ui/hooks/useAgentMutations.js +443 -8
  120. package/dist/ui/hooks/useRunList.d.ts +8 -2
  121. package/dist/ui/hooks/useRunList.js +25 -10
  122. package/dist/ui/index.js +1293 -390
  123. package/dist/ui/renderers/agent-list.markdown.d.ts +1 -1
  124. package/dist/ui/renderers/agent-list.markdown.js +14 -5
  125. package/dist/ui/renderers/agent-list.renderer.d.ts +1 -1
  126. package/dist/ui/renderers/dashboard.markdown.d.ts +1 -1
  127. package/dist/ui/renderers/dashboard.markdown.js +207 -36
  128. package/dist/ui/renderers/index.js +245 -49
  129. package/dist/ui/renderers/run-list.markdown.d.ts +1 -1
  130. package/dist/ui/renderers/run-list.markdown.js +9 -4
  131. package/dist/ui/renderers/tool-registry.markdown.d.ts +2 -2
  132. package/dist/ui/renderers/tool-registry.markdown.js +15 -4
  133. package/dist/ui/views/RunDataTable.d.ts +18 -0
  134. package/dist/ui/views/RunDataTable.js +327 -0
  135. package/dist/ui/views/RunListView.js +359 -127
  136. package/dist/ui/views/index.js +406 -174
  137. package/dist/ui/views/run-data-table.columns.d.ts +3 -0
  138. package/dist/ui/views/run-data-table.columns.js +272 -0
  139. package/dist/ui/views/run-list.shared.d.ts +14 -0
  140. package/dist/ui/views/run-list.shared.js +178 -0
  141. package/dist/visualizations/catalog.d.ts +10 -0
  142. package/dist/visualizations/catalog.js +135 -0
  143. package/dist/visualizations/index.d.ts +2 -0
  144. package/dist/visualizations/index.js +188 -0
  145. package/dist/visualizations/selectors.d.ts +3 -0
  146. package/dist/visualizations/selectors.js +182 -0
  147. package/dist/visualizations/selectors.test.d.ts +1 -0
  148. package/package.json +114 -11
  149. package/proofs/agent-console-meetup.replay.json +220 -0
  150. package/src/agent/agent.handler.ts +18 -1
  151. package/src/agent.feature.ts +3 -0
  152. package/src/docs/agent-console.docblock.ts +11 -8
  153. package/src/example.test.ts +75 -0
  154. package/src/example.ts +2 -3
  155. package/src/handlers/agent.handlers.ts +55 -2
  156. package/src/handlers/index.ts +18 -2
  157. package/src/handlers/mock-handlers.test.ts +77 -0
  158. package/src/index.ts +2 -0
  159. package/src/proof/index.ts +2 -0
  160. package/src/proof/meetup-proof.runtime.ts +196 -0
  161. package/src/proof/meetup-proof.scenario.ts +99 -0
  162. package/src/proof/meetup-proof.suite.ts +29 -0
  163. package/src/proof/meetup-proof.test.ts +28 -0
  164. package/src/proof/meetup-proof.ts +130 -0
  165. package/src/run/run.handler.ts +17 -1
  166. package/src/shared/demo-dashboard-data.ts +58 -0
  167. package/src/shared/demo-runtime-seed.ts +139 -0
  168. package/src/shared/demo-runtime.test.ts +169 -0
  169. package/src/shared/demo-runtime.ts +260 -0
  170. package/src/shared/index.ts +11 -0
  171. package/src/shared/mock-runs.ts +5 -0
  172. package/src/tool/tool.handler.ts +21 -4
  173. package/src/ui/AgentDashboard.sandbox.test.tsx +312 -0
  174. package/src/ui/AgentDashboard.tsx +4 -1
  175. package/src/ui/AgentDashboard.visualizations.tsx +35 -0
  176. package/src/ui/hooks/useAgentMutations.ts +19 -11
  177. package/src/ui/hooks/useRunList.ts +41 -9
  178. package/src/ui/renderers/agent-list.markdown.ts +32 -13
  179. package/src/ui/renderers/agent-list.renderer.tsx +1 -1
  180. package/src/ui/renderers/dashboard.markdown.ts +38 -43
  181. package/src/ui/renderers/run-list.markdown.ts +17 -9
  182. package/src/ui/renderers/tool-registry.markdown.ts +22 -10
  183. package/src/ui/views/RunDataTable.tsx +74 -0
  184. package/src/ui/views/RunListView.tsx +37 -111
  185. package/src/ui/views/run-data-table.columns.tsx +102 -0
  186. package/src/ui/views/run-list.shared.tsx +139 -0
  187. package/src/visualizations/catalog.ts +132 -0
  188. package/src/visualizations/index.ts +2 -0
  189. package/src/visualizations/selectors.test.ts +12 -0
  190. package/src/visualizations/selectors.ts +70 -0
  191. package/tsdown.config.js +17 -0
@@ -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",