@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.
Files changed (121) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/LICENSE +21 -0
  3. package/README.md +512 -0
  4. package/SKILL.md +87 -0
  5. package/dist/api/server.d.ts +68 -0
  6. package/dist/api/server.d.ts.map +1 -0
  7. package/dist/api/server.js +596 -0
  8. package/dist/api/server.js.map +1 -0
  9. package/dist/audit/audit-log.d.ts +88 -0
  10. package/dist/audit/audit-log.d.ts.map +1 -0
  11. package/dist/audit/audit-log.js +195 -0
  12. package/dist/audit/audit-log.js.map +1 -0
  13. package/dist/certification/certificate.d.ts +80 -0
  14. package/dist/certification/certificate.d.ts.map +1 -0
  15. package/dist/certification/certificate.js +176 -0
  16. package/dist/certification/certificate.js.map +1 -0
  17. package/dist/cli/bin.d.ts +8 -0
  18. package/dist/cli/bin.d.ts.map +1 -0
  19. package/dist/cli/bin.js +12 -0
  20. package/dist/cli/bin.js.map +1 -0
  21. package/dist/cli/config-loader.d.ts +66 -0
  22. package/dist/cli/config-loader.d.ts.map +1 -0
  23. package/dist/cli/config-loader.js +243 -0
  24. package/dist/cli/config-loader.js.map +1 -0
  25. package/dist/cli/runner.d.ts +27 -0
  26. package/dist/cli/runner.d.ts.map +1 -0
  27. package/dist/cli/runner.js +388 -0
  28. package/dist/cli/runner.js.map +1 -0
  29. package/dist/commands/grillo-commands.d.ts +50 -0
  30. package/dist/commands/grillo-commands.d.ts.map +1 -0
  31. package/dist/commands/grillo-commands.js +752 -0
  32. package/dist/commands/grillo-commands.js.map +1 -0
  33. package/dist/commands/inline-commands.d.ts +16 -0
  34. package/dist/commands/inline-commands.d.ts.map +1 -0
  35. package/dist/commands/inline-commands.js +277 -0
  36. package/dist/commands/inline-commands.js.map +1 -0
  37. package/dist/commands/router.d.ts +56 -0
  38. package/dist/commands/router.d.ts.map +1 -0
  39. package/dist/commands/router.js +154 -0
  40. package/dist/commands/router.js.map +1 -0
  41. package/dist/config/defaults.d.ts +9 -0
  42. package/dist/config/defaults.d.ts.map +1 -0
  43. package/dist/config/defaults.js +78 -0
  44. package/dist/config/defaults.js.map +1 -0
  45. package/dist/config/schema.d.ts +573 -0
  46. package/dist/config/schema.d.ts.map +1 -0
  47. package/dist/config/schema.js +142 -0
  48. package/dist/config/schema.js.map +1 -0
  49. package/dist/dashboard/metrics.d.ts +100 -0
  50. package/dist/dashboard/metrics.d.ts.map +1 -0
  51. package/dist/dashboard/metrics.js +282 -0
  52. package/dist/dashboard/metrics.js.map +1 -0
  53. package/dist/dashboard/ui.d.ts +19 -0
  54. package/dist/dashboard/ui.d.ts.map +1 -0
  55. package/dist/dashboard/ui.js +951 -0
  56. package/dist/dashboard/ui.js.map +1 -0
  57. package/dist/discovery/discovery-adapter.d.ts +94 -0
  58. package/dist/discovery/discovery-adapter.d.ts.map +1 -0
  59. package/dist/discovery/discovery-adapter.js +114 -0
  60. package/dist/discovery/discovery-adapter.js.map +1 -0
  61. package/dist/discovery/discovery-service.d.ts +77 -0
  62. package/dist/discovery/discovery-service.d.ts.map +1 -0
  63. package/dist/discovery/discovery-service.js +240 -0
  64. package/dist/discovery/discovery-service.js.map +1 -0
  65. package/dist/drift/detector.d.ts +51 -0
  66. package/dist/drift/detector.d.ts.map +1 -0
  67. package/dist/drift/detector.js +148 -0
  68. package/dist/drift/detector.js.map +1 -0
  69. package/dist/drift/fleet-anomaly.d.ts +28 -0
  70. package/dist/drift/fleet-anomaly.d.ts.map +1 -0
  71. package/dist/drift/fleet-anomaly.js +186 -0
  72. package/dist/drift/fleet-anomaly.js.map +1 -0
  73. package/dist/events/event-bus.d.ts +209 -0
  74. package/dist/events/event-bus.d.ts.map +1 -0
  75. package/dist/events/event-bus.js +184 -0
  76. package/dist/events/event-bus.js.map +1 -0
  77. package/dist/frameworks/framework-registry.d.ts +116 -0
  78. package/dist/frameworks/framework-registry.d.ts.map +1 -0
  79. package/dist/frameworks/framework-registry.js +241 -0
  80. package/dist/frameworks/framework-registry.js.map +1 -0
  81. package/dist/index.d.ts +94 -0
  82. package/dist/index.d.ts.map +1 -0
  83. package/dist/index.js +254 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/monitoring/continuous-monitor.d.ts +61 -0
  86. package/dist/monitoring/continuous-monitor.d.ts.map +1 -0
  87. package/dist/monitoring/continuous-monitor.js +191 -0
  88. package/dist/monitoring/continuous-monitor.js.map +1 -0
  89. package/dist/notifications/notifier.d.ts +21 -0
  90. package/dist/notifications/notifier.d.ts.map +1 -0
  91. package/dist/notifications/notifier.js +119 -0
  92. package/dist/notifications/notifier.js.map +1 -0
  93. package/dist/notifications/templates.d.ts +14 -0
  94. package/dist/notifications/templates.d.ts.map +1 -0
  95. package/dist/notifications/templates.js +105 -0
  96. package/dist/notifications/templates.js.map +1 -0
  97. package/dist/orchestration/orchestrator.d.ts +99 -0
  98. package/dist/orchestration/orchestrator.d.ts.map +1 -0
  99. package/dist/orchestration/orchestrator.js +426 -0
  100. package/dist/orchestration/orchestrator.js.map +1 -0
  101. package/dist/orchestration/queue.d.ts +17 -0
  102. package/dist/orchestration/queue.d.ts.map +1 -0
  103. package/dist/orchestration/queue.js +121 -0
  104. package/dist/orchestration/queue.js.map +1 -0
  105. package/dist/orchestration/scheduler.d.ts +26 -0
  106. package/dist/orchestration/scheduler.d.ts.map +1 -0
  107. package/dist/orchestration/scheduler.js +110 -0
  108. package/dist/orchestration/scheduler.js.map +1 -0
  109. package/dist/registry/agent-registry.d.ts +106 -0
  110. package/dist/registry/agent-registry.d.ts.map +1 -0
  111. package/dist/registry/agent-registry.js +349 -0
  112. package/dist/registry/agent-registry.js.map +1 -0
  113. package/dist/registry/types.d.ts +158 -0
  114. package/dist/registry/types.d.ts.map +1 -0
  115. package/dist/registry/types.js +44 -0
  116. package/dist/registry/types.js.map +1 -0
  117. package/dist/reports/compliance-report.d.ts +66 -0
  118. package/dist/reports/compliance-report.d.ts.map +1 -0
  119. package/dist/reports/compliance-report.js +208 -0
  120. package/dist/reports/compliance-report.js.map +1 -0
  121. 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":"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"}
@@ -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"}