@aiassesstech/grillo 0.1.0
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/CHANGELOG.md +56 -0
- package/LICENSE +21 -0
- package/README.md +512 -0
- package/SKILL.md +87 -0
- package/dist/api/server.d.ts +68 -0
- package/dist/api/server.d.ts.map +1 -0
- package/dist/api/server.js +596 -0
- package/dist/api/server.js.map +1 -0
- package/dist/audit/audit-log.d.ts +88 -0
- package/dist/audit/audit-log.d.ts.map +1 -0
- package/dist/audit/audit-log.js +195 -0
- package/dist/audit/audit-log.js.map +1 -0
- package/dist/certification/certificate.d.ts +80 -0
- package/dist/certification/certificate.d.ts.map +1 -0
- package/dist/certification/certificate.js +176 -0
- package/dist/certification/certificate.js.map +1 -0
- package/dist/cli/bin.d.ts +8 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +12 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/config-loader.d.ts +66 -0
- package/dist/cli/config-loader.d.ts.map +1 -0
- package/dist/cli/config-loader.js +243 -0
- package/dist/cli/config-loader.js.map +1 -0
- package/dist/cli/runner.d.ts +27 -0
- package/dist/cli/runner.d.ts.map +1 -0
- package/dist/cli/runner.js +388 -0
- package/dist/cli/runner.js.map +1 -0
- package/dist/commands/grillo-commands.d.ts +50 -0
- package/dist/commands/grillo-commands.d.ts.map +1 -0
- package/dist/commands/grillo-commands.js +752 -0
- package/dist/commands/grillo-commands.js.map +1 -0
- package/dist/commands/inline-commands.d.ts +16 -0
- package/dist/commands/inline-commands.d.ts.map +1 -0
- package/dist/commands/inline-commands.js +277 -0
- package/dist/commands/inline-commands.js.map +1 -0
- package/dist/commands/router.d.ts +56 -0
- package/dist/commands/router.d.ts.map +1 -0
- package/dist/commands/router.js +154 -0
- package/dist/commands/router.js.map +1 -0
- package/dist/config/defaults.d.ts +9 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +78 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/schema.d.ts +573 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +142 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/dashboard/metrics.d.ts +100 -0
- package/dist/dashboard/metrics.d.ts.map +1 -0
- package/dist/dashboard/metrics.js +282 -0
- package/dist/dashboard/metrics.js.map +1 -0
- package/dist/dashboard/ui.d.ts +19 -0
- package/dist/dashboard/ui.d.ts.map +1 -0
- package/dist/dashboard/ui.js +951 -0
- package/dist/dashboard/ui.js.map +1 -0
- package/dist/discovery/discovery-adapter.d.ts +94 -0
- package/dist/discovery/discovery-adapter.d.ts.map +1 -0
- package/dist/discovery/discovery-adapter.js +114 -0
- package/dist/discovery/discovery-adapter.js.map +1 -0
- package/dist/discovery/discovery-service.d.ts +77 -0
- package/dist/discovery/discovery-service.d.ts.map +1 -0
- package/dist/discovery/discovery-service.js +240 -0
- package/dist/discovery/discovery-service.js.map +1 -0
- package/dist/drift/detector.d.ts +51 -0
- package/dist/drift/detector.d.ts.map +1 -0
- package/dist/drift/detector.js +148 -0
- package/dist/drift/detector.js.map +1 -0
- package/dist/drift/fleet-anomaly.d.ts +28 -0
- package/dist/drift/fleet-anomaly.d.ts.map +1 -0
- package/dist/drift/fleet-anomaly.js +186 -0
- package/dist/drift/fleet-anomaly.js.map +1 -0
- package/dist/events/event-bus.d.ts +209 -0
- package/dist/events/event-bus.d.ts.map +1 -0
- package/dist/events/event-bus.js +184 -0
- package/dist/events/event-bus.js.map +1 -0
- package/dist/frameworks/framework-registry.d.ts +116 -0
- package/dist/frameworks/framework-registry.d.ts.map +1 -0
- package/dist/frameworks/framework-registry.js +241 -0
- package/dist/frameworks/framework-registry.js.map +1 -0
- package/dist/index.d.ts +94 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +254 -0
- package/dist/index.js.map +1 -0
- package/dist/monitoring/continuous-monitor.d.ts +61 -0
- package/dist/monitoring/continuous-monitor.d.ts.map +1 -0
- package/dist/monitoring/continuous-monitor.js +191 -0
- package/dist/monitoring/continuous-monitor.js.map +1 -0
- package/dist/notifications/notifier.d.ts +21 -0
- package/dist/notifications/notifier.d.ts.map +1 -0
- package/dist/notifications/notifier.js +119 -0
- package/dist/notifications/notifier.js.map +1 -0
- package/dist/notifications/templates.d.ts +14 -0
- package/dist/notifications/templates.d.ts.map +1 -0
- package/dist/notifications/templates.js +105 -0
- package/dist/notifications/templates.js.map +1 -0
- package/dist/orchestration/orchestrator.d.ts +99 -0
- package/dist/orchestration/orchestrator.d.ts.map +1 -0
- package/dist/orchestration/orchestrator.js +426 -0
- package/dist/orchestration/orchestrator.js.map +1 -0
- package/dist/orchestration/queue.d.ts +17 -0
- package/dist/orchestration/queue.d.ts.map +1 -0
- package/dist/orchestration/queue.js +121 -0
- package/dist/orchestration/queue.js.map +1 -0
- package/dist/orchestration/scheduler.d.ts +26 -0
- package/dist/orchestration/scheduler.d.ts.map +1 -0
- package/dist/orchestration/scheduler.js +110 -0
- package/dist/orchestration/scheduler.js.map +1 -0
- package/dist/registry/agent-registry.d.ts +106 -0
- package/dist/registry/agent-registry.d.ts.map +1 -0
- package/dist/registry/agent-registry.js +349 -0
- package/dist/registry/agent-registry.js.map +1 -0
- package/dist/registry/types.d.ts +158 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/types.js +44 -0
- package/dist/registry/types.js.map +1 -0
- package/dist/reports/compliance-report.d.ts +66 -0
- package/dist/reports/compliance-report.d.ts.map +1 -0
- package/dist/reports/compliance-report.js +208 -0
- package/dist/reports/compliance-report.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Grillo Cricket — Configuration Schema
|
|
3
|
+
*
|
|
4
|
+
* Zod-validated configuration for the Grillo conscience agent.
|
|
5
|
+
* Validated at startup to fail fast on misconfiguration.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
import { AgentCategory } from "../registry/types.js";
|
|
9
|
+
// ================================================================
|
|
10
|
+
// Assessment Policy Schema
|
|
11
|
+
// ================================================================
|
|
12
|
+
export const assessmentPolicySchema = z.object({
|
|
13
|
+
frequency: z.enum([
|
|
14
|
+
"startup_only",
|
|
15
|
+
"daily",
|
|
16
|
+
"weekly",
|
|
17
|
+
"on_demand",
|
|
18
|
+
"continuous",
|
|
19
|
+
]),
|
|
20
|
+
window: z.object({
|
|
21
|
+
start: z.string().regex(/^\d{2}:\d{2}$/, "Format: HH:MM"),
|
|
22
|
+
end: z.string().regex(/^\d{2}:\d{2}$/, "Format: HH:MM"),
|
|
23
|
+
timezone: z.string(),
|
|
24
|
+
}),
|
|
25
|
+
defaultFramework: z.string().default("morality"),
|
|
26
|
+
hierarchicalMode: z.boolean().default(false),
|
|
27
|
+
parallelAssessments: z.number().int().min(1).max(50).default(5),
|
|
28
|
+
retry: z.object({
|
|
29
|
+
maxAttempts: z.number().int().min(0).max(10).default(3),
|
|
30
|
+
cooldownMinutes: z.number().int().min(0).default(30),
|
|
31
|
+
}),
|
|
32
|
+
gracePeriodMinutes: z.number().int().min(0).default(60),
|
|
33
|
+
});
|
|
34
|
+
// ================================================================
|
|
35
|
+
// Category Override Schema
|
|
36
|
+
// ================================================================
|
|
37
|
+
export const categoryOverrideSchema = z.object({
|
|
38
|
+
frequency: z
|
|
39
|
+
.enum(["startup_only", "daily", "weekly", "on_demand", "continuous"])
|
|
40
|
+
.optional(),
|
|
41
|
+
thresholdModifier: z.number().min(-5).max(5).default(0),
|
|
42
|
+
minimumThreshold: z.number().min(0).max(10).optional(),
|
|
43
|
+
});
|
|
44
|
+
// ================================================================
|
|
45
|
+
// CompSi Connection Schema
|
|
46
|
+
// ================================================================
|
|
47
|
+
export const compsiConnectionSchema = z.object({
|
|
48
|
+
healthCheckKey: z.string().startsWith("hck_", "Must start with hck_"),
|
|
49
|
+
baseUrl: z.string().url().default("https://www.aiassesstech.com"),
|
|
50
|
+
perQuestionTimeoutMs: z.number().int().min(5000).default(30000),
|
|
51
|
+
overallTimeoutMs: z.number().int().min(60000).default(360000),
|
|
52
|
+
});
|
|
53
|
+
// ================================================================
|
|
54
|
+
// Notification Schema
|
|
55
|
+
// ================================================================
|
|
56
|
+
export const notificationSchema = z.object({
|
|
57
|
+
webhookUrls: z.array(z.string().url()).optional(),
|
|
58
|
+
slackChannel: z.string().optional(),
|
|
59
|
+
emailRecipients: z.array(z.string().email()).optional(),
|
|
60
|
+
events: z.array(z.enum([
|
|
61
|
+
"assessment_failed",
|
|
62
|
+
"certification_expired",
|
|
63
|
+
"drift_warning",
|
|
64
|
+
"fleet_anomaly",
|
|
65
|
+
"agent_discovered",
|
|
66
|
+
"escalation_timeout",
|
|
67
|
+
"assessment_passed",
|
|
68
|
+
"fleet_assessment_complete",
|
|
69
|
+
])),
|
|
70
|
+
});
|
|
71
|
+
// ================================================================
|
|
72
|
+
// Model Provider Schema (for direct API calls)
|
|
73
|
+
// ================================================================
|
|
74
|
+
export const modelProviderSchema = z.object({
|
|
75
|
+
baseUrl: z.string().url(),
|
|
76
|
+
apiKey: z.string().min(1),
|
|
77
|
+
api: z.enum(["anthropic-messages", "openai", "openai-chat"]),
|
|
78
|
+
});
|
|
79
|
+
// ================================================================
|
|
80
|
+
// Custom Framework Schema (Phase 6)
|
|
81
|
+
// ================================================================
|
|
82
|
+
export const customFrameworkSchema = z.object({
|
|
83
|
+
id: z.string().min(1),
|
|
84
|
+
name: z.string().min(1),
|
|
85
|
+
level: z.number().int().min(1).max(10),
|
|
86
|
+
dimensions: z.array(z.string().min(1)).min(1),
|
|
87
|
+
description: z.string().optional(),
|
|
88
|
+
subParameters: z.array(z.object({
|
|
89
|
+
name: z.string(),
|
|
90
|
+
description: z.string(),
|
|
91
|
+
options: z.array(z.string()),
|
|
92
|
+
default: z.string(),
|
|
93
|
+
})).optional(),
|
|
94
|
+
defaultThreshold: z.number().min(0).max(10).default(6.0),
|
|
95
|
+
available: z.boolean().default(true),
|
|
96
|
+
});
|
|
97
|
+
// ================================================================
|
|
98
|
+
// White-Label Config Schema (Phase 6)
|
|
99
|
+
// ================================================================
|
|
100
|
+
export const whiteLabelSchema = z.object({
|
|
101
|
+
/** Custom product name (replaces "Grillo Cricket") */
|
|
102
|
+
productName: z.string().default("Grillo Cricket"),
|
|
103
|
+
/** Custom organization name */
|
|
104
|
+
organizationName: z.string().default(""),
|
|
105
|
+
/** Custom logo URL for reports */
|
|
106
|
+
logoUrl: z.string().url().optional(),
|
|
107
|
+
/** Custom colors for dashboard */
|
|
108
|
+
primaryColor: z.string().default("#4F46E5"),
|
|
109
|
+
/** Custom report footer */
|
|
110
|
+
reportFooter: z.string().default("Powered by Grillo Cricket — The Conscience for AI"),
|
|
111
|
+
/** Custom certificate issuer name */
|
|
112
|
+
certificateIssuer: z.string().default("Grillo Cricket Assessment Authority"),
|
|
113
|
+
});
|
|
114
|
+
// ================================================================
|
|
115
|
+
// Full Grillo Config Schema
|
|
116
|
+
// ================================================================
|
|
117
|
+
export const grilloConfigSchema = z.object({
|
|
118
|
+
assessment: assessmentPolicySchema,
|
|
119
|
+
categories: z
|
|
120
|
+
.record(z.nativeEnum(AgentCategory), categoryOverrideSchema)
|
|
121
|
+
.default({}),
|
|
122
|
+
compsi: compsiConnectionSchema,
|
|
123
|
+
notifications: notificationSchema.default({
|
|
124
|
+
events: ["assessment_failed", "certification_expired", "drift_warning"],
|
|
125
|
+
}),
|
|
126
|
+
/** Model providers for direct API routing (same pattern as openclaw-plugin) */
|
|
127
|
+
providers: z.record(z.string(), modelProviderSchema).default({}),
|
|
128
|
+
/** Drift detection thresholds */
|
|
129
|
+
drift: z
|
|
130
|
+
.object({
|
|
131
|
+
tdiWarningThreshold: z.number().min(0).max(1).default(0.15),
|
|
132
|
+
tdiCriticalThreshold: z.number().min(0).max(1).default(0.3),
|
|
133
|
+
baselineAlpha: z.number().min(0).max(1).default(0.3),
|
|
134
|
+
fleetAnomalyMinAgents: z.number().int().min(2).default(3),
|
|
135
|
+
})
|
|
136
|
+
.default({}),
|
|
137
|
+
/** Phase 6: Custom assessment frameworks loaded from config */
|
|
138
|
+
customFrameworks: z.array(customFrameworkSchema).default([]),
|
|
139
|
+
/** Phase 6: White-label configuration for enterprise deployments */
|
|
140
|
+
whiteLabel: whiteLabelSchema.default({}),
|
|
141
|
+
});
|
|
142
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Grillo Cricket — Dashboard Metrics Layer
|
|
3
|
+
*
|
|
4
|
+
* Computes aggregated fleet metrics, time-series snapshots, and
|
|
5
|
+
* trend data for the Grillo dashboard. This is the data API that
|
|
6
|
+
* any frontend (CLI, web, Grafana) can consume.
|
|
7
|
+
*/
|
|
8
|
+
import type { AgentRegistry } from "../registry/agent-registry.js";
|
|
9
|
+
import type { AuditLog } from "../audit/audit-log.js";
|
|
10
|
+
import type { FrameworkRegistry } from "../frameworks/framework-registry.js";
|
|
11
|
+
import type { DriftDetector } from "../drift/detector.js";
|
|
12
|
+
export interface FleetOverview {
|
|
13
|
+
/** Total agents in the registry */
|
|
14
|
+
totalAgents: number;
|
|
15
|
+
/** Breakdown by certification status */
|
|
16
|
+
byStatus: Record<string, number>;
|
|
17
|
+
/** Breakdown by risk tier */
|
|
18
|
+
byRiskTier: Record<string, number>;
|
|
19
|
+
/** Breakdown by provider */
|
|
20
|
+
byProvider: Record<string, number>;
|
|
21
|
+
/** Breakdown by model */
|
|
22
|
+
byModel: Record<string, number>;
|
|
23
|
+
/** Breakdown by category */
|
|
24
|
+
byCategory: Record<string, number>;
|
|
25
|
+
/** Fleet certification rate (certified / total) */
|
|
26
|
+
certificationRate: number;
|
|
27
|
+
/** Number of agents with active drift */
|
|
28
|
+
driftingAgents: number;
|
|
29
|
+
/** Number of agents due for assessment */
|
|
30
|
+
dueForAssessment: number;
|
|
31
|
+
/** Average fleet score (from last assessment) */
|
|
32
|
+
averageFleetScore: number | null;
|
|
33
|
+
/** Timestamp of this snapshot */
|
|
34
|
+
snapshotAt: Date;
|
|
35
|
+
}
|
|
36
|
+
export interface HierarchyOverview {
|
|
37
|
+
/** Agents at each level */
|
|
38
|
+
byLevel: Record<string, number>;
|
|
39
|
+
/** Agents with all levels passed */
|
|
40
|
+
fullyCompliant: number;
|
|
41
|
+
/** Agents stuck (level failed) */
|
|
42
|
+
blocked: number;
|
|
43
|
+
/** Agents not yet assessed */
|
|
44
|
+
unassessed: number;
|
|
45
|
+
}
|
|
46
|
+
export interface TimeSeriesPoint {
|
|
47
|
+
timestamp: Date;
|
|
48
|
+
value: number;
|
|
49
|
+
label?: string;
|
|
50
|
+
}
|
|
51
|
+
export interface AgentTrend {
|
|
52
|
+
agentId: string;
|
|
53
|
+
agentName: string;
|
|
54
|
+
scores: TimeSeriesPoint[];
|
|
55
|
+
classifications: Array<{
|
|
56
|
+
date: Date;
|
|
57
|
+
classification: string;
|
|
58
|
+
}>;
|
|
59
|
+
}
|
|
60
|
+
export interface FleetTrend {
|
|
61
|
+
/** Average fleet score over time */
|
|
62
|
+
averageScore: TimeSeriesPoint[];
|
|
63
|
+
/** Certification count over time */
|
|
64
|
+
certifiedCount: TimeSeriesPoint[];
|
|
65
|
+
/** Assessment count over time */
|
|
66
|
+
assessmentsPerDay: TimeSeriesPoint[];
|
|
67
|
+
}
|
|
68
|
+
export declare class DashboardMetrics {
|
|
69
|
+
private readonly registry;
|
|
70
|
+
private readonly auditLog;
|
|
71
|
+
private readonly frameworkRegistry;
|
|
72
|
+
private readonly driftDetector;
|
|
73
|
+
constructor(params: {
|
|
74
|
+
registry: AgentRegistry;
|
|
75
|
+
auditLog?: AuditLog;
|
|
76
|
+
frameworkRegistry?: FrameworkRegistry;
|
|
77
|
+
driftDetector?: DriftDetector;
|
|
78
|
+
});
|
|
79
|
+
/**
|
|
80
|
+
* Get a complete snapshot of fleet health.
|
|
81
|
+
*/
|
|
82
|
+
getFleetOverview(): FleetOverview;
|
|
83
|
+
/**
|
|
84
|
+
* Get hierarchical progression overview.
|
|
85
|
+
*/
|
|
86
|
+
getHierarchyOverview(): HierarchyOverview;
|
|
87
|
+
/**
|
|
88
|
+
* Get score history for a specific agent.
|
|
89
|
+
*/
|
|
90
|
+
getAgentTrend(agentId: string): AgentTrend | null;
|
|
91
|
+
/**
|
|
92
|
+
* Get fleet-wide trend data from audit log events.
|
|
93
|
+
*/
|
|
94
|
+
getFleetTrend(periodDays?: number): FleetTrend;
|
|
95
|
+
/**
|
|
96
|
+
* Format fleet overview as a dashboard-ready markdown string.
|
|
97
|
+
*/
|
|
98
|
+
formatDashboard(): string;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/dashboard/metrics.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAE7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAM1D,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,mDAAmD;IACnD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,yCAAyC;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB,0CAA0C;IAC1C,gBAAgB,EAAE,MAAM,CAAC;IACzB,iDAAiD;IACjD,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,iCAAiC;IACjC,UAAU,EAAE,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,oCAAoC;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,eAAe,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChE;AAED,MAAM,WAAW,UAAU;IACzB,oCAAoC;IACpC,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,oCAAoC;IACpC,cAAc,EAAE,eAAe,EAAE,CAAC;IAClC,iCAAiC;IACjC,iBAAiB,EAAE,eAAe,EAAE,CAAC;CACtC;AAMD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA2B;IAC7D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAuB;gBAEzC,MAAM,EAAE;QAClB,QAAQ,EAAE,aAAa,CAAC;QACxB,QAAQ,CAAC,EAAE,QAAQ,CAAC;QACpB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;QACtC,aAAa,CAAC,EAAE,aAAa,CAAC;KAC/B;IAWD;;OAEG;IACH,gBAAgB,IAAI,aAAa;IAqGjC;;OAEG;IACH,oBAAoB,IAAI,iBAAiB;IAwCzC;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAsCjD;;OAEG;IACH,aAAa,CAAC,UAAU,GAAE,MAAW,GAAG,UAAU;IA2DlD;;OAEG;IACH,eAAe,IAAI,MAAM;CAyD1B"}
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Grillo Cricket — Dashboard Metrics Layer
|
|
3
|
+
*
|
|
4
|
+
* Computes aggregated fleet metrics, time-series snapshots, and
|
|
5
|
+
* trend data for the Grillo dashboard. This is the data API that
|
|
6
|
+
* any frontend (CLI, web, Grafana) can consume.
|
|
7
|
+
*/
|
|
8
|
+
import { CertificationStatus, LevelStatus, RiskTier } from "../registry/types.js";
|
|
9
|
+
// ================================================================
|
|
10
|
+
// Metrics Service
|
|
11
|
+
// ================================================================
|
|
12
|
+
export class DashboardMetrics {
|
|
13
|
+
registry;
|
|
14
|
+
auditLog;
|
|
15
|
+
frameworkRegistry;
|
|
16
|
+
driftDetector;
|
|
17
|
+
constructor(params) {
|
|
18
|
+
this.registry = params.registry;
|
|
19
|
+
this.auditLog = params.auditLog ?? null;
|
|
20
|
+
this.frameworkRegistry = params.frameworkRegistry ?? null;
|
|
21
|
+
this.driftDetector = params.driftDetector ?? null;
|
|
22
|
+
}
|
|
23
|
+
// ============================================================
|
|
24
|
+
// Fleet Overview
|
|
25
|
+
// ============================================================
|
|
26
|
+
/**
|
|
27
|
+
* Get a complete snapshot of fleet health.
|
|
28
|
+
*/
|
|
29
|
+
getFleetOverview() {
|
|
30
|
+
const agents = this.registry.all();
|
|
31
|
+
const total = agents.length;
|
|
32
|
+
// Status breakdown
|
|
33
|
+
const byStatus = {};
|
|
34
|
+
for (const status of Object.values(CertificationStatus)) {
|
|
35
|
+
byStatus[status] = 0;
|
|
36
|
+
}
|
|
37
|
+
for (const a of agents) {
|
|
38
|
+
byStatus[a.certificationStatus] =
|
|
39
|
+
(byStatus[a.certificationStatus] ?? 0) + 1;
|
|
40
|
+
}
|
|
41
|
+
// Risk tier breakdown
|
|
42
|
+
const byRiskTier = {};
|
|
43
|
+
for (const tier of Object.values(RiskTier)) {
|
|
44
|
+
byRiskTier[tier] = 0;
|
|
45
|
+
}
|
|
46
|
+
for (const a of agents) {
|
|
47
|
+
byRiskTier[a.riskTier] = (byRiskTier[a.riskTier] ?? 0) + 1;
|
|
48
|
+
}
|
|
49
|
+
// Provider breakdown
|
|
50
|
+
const byProvider = {};
|
|
51
|
+
for (const a of agents) {
|
|
52
|
+
byProvider[a.provider] = (byProvider[a.provider] ?? 0) + 1;
|
|
53
|
+
}
|
|
54
|
+
// Model breakdown
|
|
55
|
+
const byModel = {};
|
|
56
|
+
for (const a of agents) {
|
|
57
|
+
byModel[a.model] = (byModel[a.model] ?? 0) + 1;
|
|
58
|
+
}
|
|
59
|
+
// Category breakdown
|
|
60
|
+
const byCategory = {};
|
|
61
|
+
for (const a of agents) {
|
|
62
|
+
byCategory[a.category] = (byCategory[a.category] ?? 0) + 1;
|
|
63
|
+
}
|
|
64
|
+
// Certification rate
|
|
65
|
+
const certifiedCount = byStatus[CertificationStatus.CERTIFIED] ?? 0;
|
|
66
|
+
const certificationRate = total > 0 ? certifiedCount / total : 0;
|
|
67
|
+
// Drifting agents
|
|
68
|
+
let driftingAgents = 0;
|
|
69
|
+
if (this.driftDetector) {
|
|
70
|
+
for (const a of agents) {
|
|
71
|
+
if (a.driftBaseline) {
|
|
72
|
+
const report = this.driftDetector.analyze(a, a.driftBaseline);
|
|
73
|
+
if (report.severity !== "none") {
|
|
74
|
+
driftingAgents++;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Due for assessment
|
|
80
|
+
const dueForAssessment = this.registry.dueForAssessment().length;
|
|
81
|
+
// Average fleet score
|
|
82
|
+
let averageFleetScore = null;
|
|
83
|
+
const scoredAgents = agents.filter((a) => a.certificationHistory.length > 0);
|
|
84
|
+
if (scoredAgents.length > 0) {
|
|
85
|
+
let totalScore = 0;
|
|
86
|
+
let scoreCount = 0;
|
|
87
|
+
for (const a of scoredAgents) {
|
|
88
|
+
const lastCert = a.certificationHistory[a.certificationHistory.length - 1];
|
|
89
|
+
for (const score of Object.values(lastCert.scores)) {
|
|
90
|
+
totalScore += score;
|
|
91
|
+
scoreCount++;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
averageFleetScore =
|
|
95
|
+
scoreCount > 0 ? Math.round((totalScore / scoreCount) * 100) / 100 : null;
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
totalAgents: total,
|
|
99
|
+
byStatus,
|
|
100
|
+
byRiskTier,
|
|
101
|
+
byProvider,
|
|
102
|
+
byModel,
|
|
103
|
+
byCategory,
|
|
104
|
+
certificationRate,
|
|
105
|
+
driftingAgents,
|
|
106
|
+
dueForAssessment,
|
|
107
|
+
averageFleetScore,
|
|
108
|
+
snapshotAt: new Date(),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
// ============================================================
|
|
112
|
+
// Hierarchy Overview
|
|
113
|
+
// ============================================================
|
|
114
|
+
/**
|
|
115
|
+
* Get hierarchical progression overview.
|
|
116
|
+
*/
|
|
117
|
+
getHierarchyOverview() {
|
|
118
|
+
const agents = this.registry.all();
|
|
119
|
+
const byLevel = {
|
|
120
|
+
"Level 1 - Morality": 0,
|
|
121
|
+
"Level 2 - Virtue": 0,
|
|
122
|
+
"Level 3 - Ethics": 0,
|
|
123
|
+
"Level 4 - OpEx": 0,
|
|
124
|
+
};
|
|
125
|
+
let fullyCompliant = 0;
|
|
126
|
+
let blocked = 0;
|
|
127
|
+
let unassessed = 0;
|
|
128
|
+
for (const a of agents) {
|
|
129
|
+
const p = a.hierarchicalProgress;
|
|
130
|
+
// Determine highest passed level
|
|
131
|
+
if (p.level4_opex === LevelStatus.PASSED) {
|
|
132
|
+
byLevel["Level 4 - OpEx"]++;
|
|
133
|
+
fullyCompliant++;
|
|
134
|
+
}
|
|
135
|
+
else if (p.level3_ethics === LevelStatus.PASSED) {
|
|
136
|
+
byLevel["Level 3 - Ethics"]++;
|
|
137
|
+
}
|
|
138
|
+
else if (p.level2_virtue === LevelStatus.PASSED) {
|
|
139
|
+
byLevel["Level 2 - Virtue"]++;
|
|
140
|
+
}
|
|
141
|
+
else if (p.level1_morality === LevelStatus.PASSED) {
|
|
142
|
+
byLevel["Level 1 - Morality"]++;
|
|
143
|
+
}
|
|
144
|
+
else if (p.level1_morality === LevelStatus.FAILED) {
|
|
145
|
+
blocked++;
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
unassessed++;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return { byLevel, fullyCompliant, blocked, unassessed };
|
|
152
|
+
}
|
|
153
|
+
// ============================================================
|
|
154
|
+
// Agent Trends
|
|
155
|
+
// ============================================================
|
|
156
|
+
/**
|
|
157
|
+
* Get score history for a specific agent.
|
|
158
|
+
*/
|
|
159
|
+
getAgentTrend(agentId) {
|
|
160
|
+
const agent = this.registry.get(agentId);
|
|
161
|
+
if (!agent)
|
|
162
|
+
return null;
|
|
163
|
+
const scores = [];
|
|
164
|
+
const classifications = [];
|
|
165
|
+
for (const cert of agent.certificationHistory) {
|
|
166
|
+
// Compute average score across dimensions
|
|
167
|
+
const dims = Object.values(cert.scores);
|
|
168
|
+
const avg = dims.length > 0
|
|
169
|
+
? dims.reduce((sum, v) => sum + v, 0) / dims.length
|
|
170
|
+
: 0;
|
|
171
|
+
scores.push({
|
|
172
|
+
timestamp: cert.assessedAt,
|
|
173
|
+
value: Math.round(avg * 100) / 100,
|
|
174
|
+
label: cert.framework,
|
|
175
|
+
});
|
|
176
|
+
classifications.push({
|
|
177
|
+
date: cert.assessedAt,
|
|
178
|
+
classification: cert.classification,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
return {
|
|
182
|
+
agentId,
|
|
183
|
+
agentName: agent.agentName,
|
|
184
|
+
scores,
|
|
185
|
+
classifications,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
// ============================================================
|
|
189
|
+
// Fleet Trends
|
|
190
|
+
// ============================================================
|
|
191
|
+
/**
|
|
192
|
+
* Get fleet-wide trend data from audit log events.
|
|
193
|
+
*/
|
|
194
|
+
getFleetTrend(periodDays = 30) {
|
|
195
|
+
const cutoff = new Date();
|
|
196
|
+
cutoff.setDate(cutoff.getDate() - periodDays);
|
|
197
|
+
// Assessment events per day
|
|
198
|
+
const assessmentsPerDay = new Map();
|
|
199
|
+
const certifiedPerDay = new Map();
|
|
200
|
+
if (this.auditLog) {
|
|
201
|
+
const entries = this.auditLog.between(cutoff, new Date());
|
|
202
|
+
for (const entry of entries) {
|
|
203
|
+
const dayKey = String(entry.timestamp).split("T")[0];
|
|
204
|
+
if (entry.action === "assessment_completed" ||
|
|
205
|
+
entry.action === "assessment_started") {
|
|
206
|
+
assessmentsPerDay.set(dayKey, (assessmentsPerDay.get(dayKey) ?? 0) + 1);
|
|
207
|
+
}
|
|
208
|
+
if (entry.action === "certification_granted") {
|
|
209
|
+
certifiedPerDay.set(dayKey, (certifiedPerDay.get(dayKey) ?? 0) + 1);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
// Convert to time series
|
|
214
|
+
const assessments = Array.from(assessmentsPerDay.entries()).map(([day, count]) => ({
|
|
215
|
+
timestamp: new Date(day),
|
|
216
|
+
value: count,
|
|
217
|
+
}));
|
|
218
|
+
const certified = Array.from(certifiedPerDay.entries()).map(([day, count]) => ({
|
|
219
|
+
timestamp: new Date(day),
|
|
220
|
+
value: count,
|
|
221
|
+
}));
|
|
222
|
+
return {
|
|
223
|
+
averageScore: [], // Populated from periodic snapshots in production
|
|
224
|
+
certifiedCount: certified,
|
|
225
|
+
assessmentsPerDay: assessments,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
// ============================================================
|
|
229
|
+
// Formatted Output
|
|
230
|
+
// ============================================================
|
|
231
|
+
/**
|
|
232
|
+
* Format fleet overview as a dashboard-ready markdown string.
|
|
233
|
+
*/
|
|
234
|
+
formatDashboard() {
|
|
235
|
+
const overview = this.getFleetOverview();
|
|
236
|
+
const hierarchy = this.getHierarchyOverview();
|
|
237
|
+
const lines = [
|
|
238
|
+
"# Grillo Cricket — Fleet Dashboard",
|
|
239
|
+
"",
|
|
240
|
+
`_Snapshot: ${overview.snapshotAt.toISOString()}_`,
|
|
241
|
+
"",
|
|
242
|
+
"## Fleet Overview",
|
|
243
|
+
"",
|
|
244
|
+
`| Metric | Value |`,
|
|
245
|
+
`|--------|-------|`,
|
|
246
|
+
`| Total Agents | ${overview.totalAgents} |`,
|
|
247
|
+
`| Certification Rate | ${(overview.certificationRate * 100).toFixed(1)}% |`,
|
|
248
|
+
`| Average Fleet Score | ${overview.averageFleetScore?.toFixed(1) ?? "N/A"} |`,
|
|
249
|
+
`| Drifting Agents | ${overview.driftingAgents} |`,
|
|
250
|
+
`| Due for Assessment | ${overview.dueForAssessment} |`,
|
|
251
|
+
"",
|
|
252
|
+
"## Certification Status",
|
|
253
|
+
"",
|
|
254
|
+
"| Status | Count |",
|
|
255
|
+
"|--------|-------|",
|
|
256
|
+
];
|
|
257
|
+
for (const [status, count] of Object.entries(overview.byStatus)) {
|
|
258
|
+
if (count > 0) {
|
|
259
|
+
lines.push(`| ${status} | ${count} |`);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
lines.push("", "## Risk Distribution", "", "| Tier | Count |", "|------|-------|");
|
|
263
|
+
for (const [tier, count] of Object.entries(overview.byRiskTier)) {
|
|
264
|
+
if (count > 0) {
|
|
265
|
+
lines.push(`| ${tier} | ${count} |`);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
lines.push("", "## Hierarchical Progression", "", "| Level | Count |", "|-------|-------|");
|
|
269
|
+
for (const [level, count] of Object.entries(hierarchy.byLevel)) {
|
|
270
|
+
lines.push(`| ${level} | ${count} |`);
|
|
271
|
+
}
|
|
272
|
+
lines.push(`| Fully Compliant (All 4) | ${hierarchy.fullyCompliant} |`, `| Blocked (Failed) | ${hierarchy.blocked} |`, `| Unassessed | ${hierarchy.unassessed} |`);
|
|
273
|
+
if (Object.keys(overview.byProvider).length > 0) {
|
|
274
|
+
lines.push("", "## Provider Distribution", "", "| Provider | Count |", "|----------|-------|");
|
|
275
|
+
for (const [provider, count] of Object.entries(overview.byProvider)) {
|
|
276
|
+
lines.push(`| ${provider} | ${count} |`);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return lines.join("\n");
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
//# sourceMappingURL=metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/dashboard/metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Grillo Cricket — Dashboard UI
|
|
3
|
+
*
|
|
4
|
+
* Embedded single-page web dashboard. Served as inline HTML from the
|
|
5
|
+
* API server — zero external dependencies, zero build step.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Fleet overview with live status cards
|
|
9
|
+
* - Agent table with status badges and risk tiers
|
|
10
|
+
* - Drift gauges per agent
|
|
11
|
+
* - Hierarchical progression visualization
|
|
12
|
+
* - Audit trail viewer
|
|
13
|
+
* - Auto-refresh via polling
|
|
14
|
+
*
|
|
15
|
+
* All data fetched from /api/grillo/* endpoints.
|
|
16
|
+
*/
|
|
17
|
+
import type { GrilloConfig } from "../config/schema.js";
|
|
18
|
+
export declare function generateDashboardHTML(config: GrilloConfig): string;
|
|
19
|
+
//# sourceMappingURL=ui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/dashboard/ui.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAMxD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAm6BlE"}
|