@contractspec/example.agent-console 3.7.7 → 3.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +126 -105
- package/AGENTS.md +3 -1
- package/CHANGELOG.md +29 -0
- package/README.md +46 -9
- package/dist/agent/agent.handler.d.ts +3 -0
- package/dist/agent/agent.handler.js +730 -1
- package/dist/agent/index.js +73 -72
- package/dist/agent.feature.js +179 -0
- package/dist/browser/agent/agent.handler.js +730 -1
- package/dist/browser/agent/index.js +73 -72
- package/dist/browser/agent.feature.js +179 -0
- package/dist/browser/docs/agent-console.docblock.js +11 -8
- package/dist/browser/docs/index.js +11 -8
- package/dist/browser/example.js +2 -3
- package/dist/browser/handlers/agent.handlers.js +1883 -2
- package/dist/browser/handlers/index.js +2142 -8
- package/dist/browser/index.js +3347 -2433
- package/dist/browser/presentations/index.js +49 -49
- package/dist/browser/run/index.js +818 -812
- package/dist/browser/run/run.handler.js +666 -1
- package/dist/browser/shared/index.js +293 -1
- package/dist/browser/shared/mock-runs.js +5 -0
- package/dist/browser/tool/index.js +331 -331
- package/dist/browser/tool/tool.handler.js +479 -3
- package/dist/browser/ui/AgentDashboard.js +1204 -319
- package/dist/browser/ui/AgentDashboard.visualizations.js +217 -0
- package/dist/browser/ui/AgentRunList.js +359 -127
- package/dist/browser/ui/hooks/index.js +468 -18
- package/dist/browser/ui/hooks/useAgentMutations.js +443 -8
- package/dist/browser/ui/hooks/useRunList.js +25 -10
- package/dist/browser/ui/index.js +1293 -390
- package/dist/browser/ui/renderers/agent-list.markdown.js +14 -5
- package/dist/browser/ui/renderers/dashboard.markdown.js +207 -36
- package/dist/browser/ui/renderers/index.js +245 -49
- package/dist/browser/ui/renderers/run-list.markdown.js +9 -4
- package/dist/browser/ui/renderers/tool-registry.markdown.js +15 -4
- package/dist/browser/ui/views/RunDataTable.js +326 -0
- package/dist/browser/ui/views/RunListView.js +359 -127
- package/dist/browser/ui/views/index.js +406 -174
- package/dist/browser/ui/views/run-data-table.columns.js +271 -0
- package/dist/browser/ui/views/run-list.shared.js +177 -0
- package/dist/browser/visualizations/catalog.js +134 -0
- package/dist/browser/visualizations/index.js +187 -0
- package/dist/browser/visualizations/selectors.js +181 -0
- package/dist/docs/agent-console.docblock.js +11 -8
- package/dist/docs/index.js +11 -8
- package/dist/example.js +2 -3
- package/dist/example.test.d.ts +1 -0
- package/dist/handlers/agent.handlers.d.ts +2 -0
- package/dist/handlers/agent.handlers.js +1883 -2
- package/dist/handlers/index.d.ts +1 -3
- package/dist/handlers/index.js +2142 -8
- package/dist/handlers/mock-handlers.test.d.ts +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3347 -2433
- package/dist/node/agent/agent.handler.js +730 -1
- package/dist/node/agent/index.js +73 -72
- package/dist/node/agent.feature.js +179 -0
- package/dist/node/docs/agent-console.docblock.js +11 -8
- package/dist/node/docs/index.js +11 -8
- package/dist/node/example.js +2 -3
- package/dist/node/handlers/agent.handlers.js +1883 -2
- package/dist/node/handlers/index.js +2142 -8
- package/dist/node/index.js +3347 -2433
- package/dist/node/presentations/index.js +49 -49
- package/dist/node/run/index.js +818 -812
- package/dist/node/run/run.handler.js +666 -1
- package/dist/node/shared/index.js +293 -1
- package/dist/node/shared/mock-runs.js +5 -0
- package/dist/node/tool/index.js +331 -331
- package/dist/node/tool/tool.handler.js +479 -3
- package/dist/node/ui/AgentDashboard.js +1204 -319
- package/dist/node/ui/AgentDashboard.visualizations.js +217 -0
- package/dist/node/ui/AgentRunList.js +359 -127
- package/dist/node/ui/hooks/index.js +468 -18
- package/dist/node/ui/hooks/useAgentMutations.js +443 -8
- package/dist/node/ui/hooks/useRunList.js +25 -10
- package/dist/node/ui/index.js +1293 -390
- package/dist/node/ui/renderers/agent-list.markdown.js +14 -5
- package/dist/node/ui/renderers/dashboard.markdown.js +207 -36
- package/dist/node/ui/renderers/index.js +245 -49
- package/dist/node/ui/renderers/run-list.markdown.js +9 -4
- package/dist/node/ui/renderers/tool-registry.markdown.js +15 -4
- package/dist/node/ui/views/RunDataTable.js +326 -0
- package/dist/node/ui/views/RunListView.js +359 -127
- package/dist/node/ui/views/index.js +406 -174
- package/dist/node/ui/views/run-data-table.columns.js +271 -0
- package/dist/node/ui/views/run-list.shared.js +177 -0
- package/dist/node/visualizations/catalog.js +134 -0
- package/dist/node/visualizations/index.js +187 -0
- package/dist/node/visualizations/selectors.js +181 -0
- package/dist/presentations/index.js +49 -49
- package/dist/proof/index.d.ts +2 -0
- package/dist/proof/meetup-proof.d.ts +10 -0
- package/dist/proof/meetup-proof.runtime.d.ts +22 -0
- package/dist/proof/meetup-proof.scenario.d.ts +2 -0
- package/dist/proof/meetup-proof.suite.d.ts +1 -0
- package/dist/proof/meetup-proof.test.d.ts +1 -0
- package/dist/run/index.js +818 -812
- package/dist/run/run.handler.d.ts +4 -0
- package/dist/run/run.handler.js +666 -1
- package/dist/shared/demo-dashboard-data.d.ts +16 -0
- package/dist/shared/demo-runtime-seed.d.ts +17 -0
- package/dist/shared/demo-runtime.d.ts +8 -0
- package/dist/shared/demo-runtime.test.d.ts +1 -0
- package/dist/shared/index.d.ts +3 -0
- package/dist/shared/index.js +293 -1
- package/dist/shared/mock-runs.d.ts +4 -0
- package/dist/shared/mock-runs.js +5 -0
- package/dist/tool/index.js +331 -331
- package/dist/tool/tool.handler.d.ts +4 -1
- package/dist/tool/tool.handler.js +479 -3
- package/dist/ui/AgentDashboard.js +1204 -319
- package/dist/ui/AgentDashboard.sandbox.test.d.ts +1 -0
- package/dist/ui/AgentDashboard.visualizations.d.ts +4 -0
- package/dist/ui/AgentDashboard.visualizations.js +218 -0
- package/dist/ui/AgentRunList.js +359 -127
- package/dist/ui/hooks/index.js +468 -18
- package/dist/ui/hooks/useAgentMutations.js +443 -8
- package/dist/ui/hooks/useRunList.d.ts +8 -2
- package/dist/ui/hooks/useRunList.js +25 -10
- package/dist/ui/index.js +1293 -390
- package/dist/ui/renderers/agent-list.markdown.js +14 -5
- package/dist/ui/renderers/dashboard.markdown.js +207 -36
- package/dist/ui/renderers/index.js +245 -49
- package/dist/ui/renderers/run-list.markdown.js +9 -4
- package/dist/ui/renderers/tool-registry.markdown.d.ts +1 -1
- package/dist/ui/renderers/tool-registry.markdown.js +15 -4
- package/dist/ui/views/RunDataTable.d.ts +18 -0
- package/dist/ui/views/RunDataTable.js +327 -0
- package/dist/ui/views/RunListView.js +359 -127
- package/dist/ui/views/index.js +406 -174
- package/dist/ui/views/run-data-table.columns.d.ts +3 -0
- package/dist/ui/views/run-data-table.columns.js +272 -0
- package/dist/ui/views/run-list.shared.d.ts +14 -0
- package/dist/ui/views/run-list.shared.js +178 -0
- package/dist/visualizations/catalog.d.ts +10 -0
- package/dist/visualizations/catalog.js +135 -0
- package/dist/visualizations/index.d.ts +2 -0
- package/dist/visualizations/index.js +188 -0
- package/dist/visualizations/selectors.d.ts +3 -0
- package/dist/visualizations/selectors.js +182 -0
- package/dist/visualizations/selectors.test.d.ts +1 -0
- package/package.json +112 -10
- package/proofs/agent-console-meetup.replay.json +220 -0
- package/src/agent/agent.handler.ts +18 -1
- package/src/agent.feature.ts +3 -0
- package/src/docs/agent-console.docblock.ts +11 -8
- package/src/example.test.ts +75 -0
- package/src/example.ts +2 -3
- package/src/handlers/agent.handlers.ts +55 -2
- package/src/handlers/index.ts +18 -2
- package/src/handlers/mock-handlers.test.ts +77 -0
- package/src/index.ts +2 -0
- package/src/proof/index.ts +2 -0
- package/src/proof/meetup-proof.runtime.ts +196 -0
- package/src/proof/meetup-proof.scenario.ts +99 -0
- package/src/proof/meetup-proof.suite.ts +29 -0
- package/src/proof/meetup-proof.test.ts +28 -0
- package/src/proof/meetup-proof.ts +130 -0
- package/src/run/run.handler.ts +17 -1
- package/src/shared/demo-dashboard-data.ts +58 -0
- package/src/shared/demo-runtime-seed.ts +139 -0
- package/src/shared/demo-runtime.test.ts +169 -0
- package/src/shared/demo-runtime.ts +260 -0
- package/src/shared/index.ts +11 -0
- package/src/shared/mock-runs.ts +5 -0
- package/src/tool/tool.handler.ts +21 -4
- package/src/ui/AgentDashboard.sandbox.test.tsx +312 -0
- package/src/ui/AgentDashboard.tsx +4 -1
- package/src/ui/AgentDashboard.visualizations.tsx +35 -0
- package/src/ui/hooks/useAgentMutations.ts +19 -11
- package/src/ui/hooks/useRunList.ts +41 -9
- package/src/ui/renderers/agent-list.markdown.ts +31 -12
- package/src/ui/renderers/dashboard.markdown.ts +37 -42
- package/src/ui/renderers/run-list.markdown.ts +16 -8
- package/src/ui/renderers/tool-registry.markdown.ts +21 -9
- package/src/ui/views/RunDataTable.tsx +74 -0
- package/src/ui/views/RunListView.tsx +37 -111
- package/src/ui/views/run-data-table.columns.tsx +102 -0
- package/src/ui/views/run-list.shared.tsx +139 -0
- package/src/visualizations/catalog.ts +132 -0
- package/src/visualizations/index.ts +2 -0
- package/src/visualizations/selectors.test.ts +12 -0
- package/src/visualizations/selectors.ts +70 -0
- package/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",
|