@vfarcic/dot-ai
Version:
AI-powered development productivity platform that enhances software development workflows through intelligent automation and AI-driven assistance
135 lines (134 loc) • 5.53 kB
JavaScript
"use strict";
/**
* Visualization Response Schemas
*
* Schemas for the /api/v1/visualize/:sessionId endpoint.
* PRD #354: REST API Route Registry with Auto-Generated OpenAPI and Test Fixtures
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.VisualizationInternalErrorSchema = exports.VisualizationServiceUnavailableErrorSchema = exports.VisualizationNotFoundErrorSchema = exports.VisualizationResponseSchema = exports.VisualizationResponseDataSchema = exports.VisualizationSchema = exports.VisualizationContentSchema = exports.BarChartContentSchema = exports.BarChartDataItemSchema = exports.DiffContentSchema = exports.CardsContentSchema = exports.CardItemSchema = exports.TableContentSchema = exports.CodeContentSchema = exports.VisualizationTypeSchema = void 0;
const zod_1 = require("zod");
const common_1 = require("./common");
/**
* Visualization types supported by the API
* PRD #320: Added 'diff' type for before/after comparisons
* PRD #328: Added 'bar-chart' type for metrics visualization
*/
exports.VisualizationTypeSchema = zod_1.z.enum([
'mermaid',
'cards',
'code',
'table',
'diff',
'bar-chart',
]);
/**
* Code visualization content
*/
exports.CodeContentSchema = zod_1.z.object({
language: zod_1.z.string().describe('Programming language for syntax highlighting'),
code: zod_1.z.string().describe('Code content'),
});
/**
* Table visualization content
*/
exports.TableContentSchema = zod_1.z.object({
headers: zod_1.z.array(zod_1.z.string()).describe('Column headers'),
rows: zod_1.z.array(zod_1.z.array(zod_1.z.string())).describe('Table rows'),
});
/**
* Card item in cards visualization
*/
exports.CardItemSchema = zod_1.z.object({
id: zod_1.z.string().describe('Unique card identifier'),
title: zod_1.z.string().describe('Card title'),
description: zod_1.z.string().optional().describe('Card description'),
tags: zod_1.z.array(zod_1.z.string()).optional().describe('Tags/labels for the card'),
});
/**
* Cards visualization content
*/
exports.CardsContentSchema = zod_1.z.array(exports.CardItemSchema);
/**
* Diff visualization content (PRD #320)
*/
exports.DiffContentSchema = zod_1.z.object({
before: exports.CodeContentSchema.describe('Code before changes'),
after: exports.CodeContentSchema.describe('Code after changes'),
});
/**
* Bar chart data item (PRD #328)
*/
exports.BarChartDataItemSchema = zod_1.z.object({
label: zod_1.z.string().describe('Data point label (e.g., "node-1", "kube-system")'),
value: zod_1.z.number().describe('Numeric value'),
max: zod_1.z.number().optional().describe('Maximum value for percentage calculation'),
status: zod_1.z.enum(['error', 'warning', 'ok']).optional().describe('Status for color-coding'),
});
/**
* Bar chart visualization content (PRD #328)
*/
exports.BarChartContentSchema = zod_1.z.object({
data: zod_1.z.array(exports.BarChartDataItemSchema).describe('Chart data points'),
unit: zod_1.z.string().optional().describe('Unit label (e.g., "Gi", "cores", "%")'),
orientation: zod_1.z.enum(['horizontal', 'vertical']).optional().describe('Chart orientation'),
});
/**
* Visualization content union type
* Content varies based on visualization type
*/
exports.VisualizationContentSchema = zod_1.z.union([
zod_1.z.string(), // mermaid diagram code
exports.CodeContentSchema, // code block
exports.TableContentSchema, // table
exports.CardsContentSchema, // array of cards
exports.DiffContentSchema, // diff view
exports.BarChartContentSchema, // bar chart
]);
/**
* Individual visualization item
*/
exports.VisualizationSchema = zod_1.z.object({
id: zod_1.z.string().describe('Unique visualization identifier'),
label: zod_1.z.string().describe('Display label'),
type: exports.VisualizationTypeSchema.describe('Visualization type'),
content: exports.VisualizationContentSchema.describe('Visualization content (varies by type)'),
});
/**
* Visualization endpoint response data
* PRD #320: Added toolsUsed for test validation
*/
exports.VisualizationResponseDataSchema = zod_1.z.object({
title: zod_1.z.string().describe('Title of the visualization'),
visualizations: zod_1.z.array(exports.VisualizationSchema).describe('Array of visualizations'),
insights: zod_1.z.array(zod_1.z.string()).describe('AI-generated insights about the data'),
toolsUsed: zod_1.z.array(zod_1.z.string()).optional().describe('Tools called during visualization generation'),
});
/**
* Full visualization endpoint response
*/
exports.VisualizationResponseSchema = (0, common_1.createSuccessResponseSchema)(exports.VisualizationResponseDataSchema);
/**
* Visualization endpoint error responses
*/
exports.VisualizationNotFoundErrorSchema = common_1.NotFoundErrorSchema.extend({
error: zod_1.z.object({
code: zod_1.z.literal('SESSION_NOT_FOUND'),
message: zod_1.z.string(),
details: zod_1.z.any().optional(),
}),
});
exports.VisualizationServiceUnavailableErrorSchema = common_1.ServiceUnavailableErrorSchema.extend({
error: zod_1.z.object({
code: zod_1.z.literal('AI_NOT_CONFIGURED'),
message: zod_1.z.string(),
details: zod_1.z.any().optional(),
}),
});
exports.VisualizationInternalErrorSchema = common_1.InternalServerErrorSchema.extend({
error: zod_1.z.object({
code: zod_1.z.literal('VISUALIZATION_ERROR'),
message: zod_1.z.string(),
details: zod_1.z.any().optional(),
}),
});