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