@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
|
@@ -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 {};
|
package/dist/shared/index.d.ts
CHANGED
|
@@ -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';
|
package/dist/shared/index.js
CHANGED
|
@@ -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;
|
package/dist/shared/mock-runs.js
CHANGED
|
@@ -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",
|