@vfarcic/dot-ai
Version:
AI-powered development productivity platform that enhances software development workflows through intelligent automation and AI-driven assistance
114 lines (113 loc) • 5.19 kB
JavaScript
"use strict";
/**
* Sessions Endpoint Schemas
*
* Schemas for the /api/v1/sessions/:sessionId endpoint.
* PRD #354: REST API Route Registry with Auto-Generated OpenAPI and Test Fixtures
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.RemediationSSEEventSchema = exports.SessionListErrorSchema = exports.SessionListResponseSchema = exports.SessionListDataSchema = exports.SessionSummarySchema = exports.SessionListQuerySchema = exports.SessionRetrievalErrorSchema = exports.SessionNotFoundErrorSchema = exports.SessionResponseSchema = exports.SessionResponseDataSchema = exports.SessionDataSchema = exports.SessionMetadataSchema = void 0;
const zod_1 = require("zod");
const common_1 = require("./common");
/**
* Session metadata
*/
exports.SessionMetadataSchema = zod_1.z.object({
id: zod_1.z.string().describe('Session ID'),
createdAt: zod_1.z.string().describe('Session creation timestamp'),
expiresAt: zod_1.z.string().optional().describe('Session expiration timestamp'),
});
/**
* Generic session data
* Sessions can contain different data based on the tool that created them
*/
exports.SessionDataSchema = zod_1.z.object({
toolName: zod_1.z.string().optional().describe('Tool that created this session'),
intent: zod_1.z.string().optional().describe('User intent for this session'),
// Additional fields vary by tool type
}).passthrough(); // Allow additional properties
/**
* Session response data
* GET /api/v1/sessions/:sessionId
*/
exports.SessionResponseDataSchema = zod_1.z.object({
id: zod_1.z.string().describe('Session ID'),
data: exports.SessionDataSchema.describe('Session data'),
createdAt: zod_1.z.string().optional().describe('Session creation timestamp'),
expiresAt: zod_1.z.string().optional().describe('Session expiration timestamp'),
});
exports.SessionResponseSchema = (0, common_1.createSuccessResponseSchema)(exports.SessionResponseDataSchema);
/**
* Session endpoint error schemas
*/
exports.SessionNotFoundErrorSchema = 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.SessionRetrievalErrorSchema = common_1.InternalServerErrorSchema.extend({
error: zod_1.z.object({
code: zod_1.z.literal('SESSION_RETRIEVAL_ERROR'),
message: zod_1.z.string(),
details: zod_1.z.any().optional(),
}),
});
/**
* Session List Endpoint Schemas
* GET /api/v1/sessions
* PRD #425: Session List API and SSE Streaming
*/
/**
* Query parameters for listing sessions
*/
exports.SessionListQuerySchema = zod_1.z.object({
status: zod_1.z.string().optional().describe('Filter by session status (e.g., analysis_complete, failed, investigating)'),
limit: zod_1.z.coerce.number().int().min(1).max(200).default(50).describe('Max results per page'),
offset: zod_1.z.coerce.number().int().min(0).default(0).describe('Pagination offset'),
});
/**
* Session summary (no finalAnalysis to keep responses lean)
*/
exports.SessionSummarySchema = zod_1.z.object({
sessionId: zod_1.z.string().describe('Session ID'),
status: zod_1.z.string().optional().describe('Session status'),
issue: zod_1.z.string().optional().describe('Issue being investigated'),
mode: zod_1.z.string().optional().describe('Remediation mode (manual/automatic)'),
toolName: zod_1.z.string().optional().describe('Tool that created this session'),
createdAt: zod_1.z.string().describe('Session creation timestamp'),
updatedAt: zod_1.z.string().describe('Session last update timestamp'),
});
/**
* Session list response data
*/
exports.SessionListDataSchema = zod_1.z.object({
sessions: zod_1.z.array(exports.SessionSummarySchema).describe('List of session summaries'),
total: zod_1.z.number().describe('Total number of sessions matching the filter'),
limit: zod_1.z.number().describe('Max results per page'),
offset: zod_1.z.number().describe('Pagination offset'),
});
exports.SessionListResponseSchema = (0, common_1.createSuccessResponseSchema)(exports.SessionListDataSchema);
exports.SessionListErrorSchema = common_1.InternalServerErrorSchema.extend({
error: zod_1.z.object({
code: zod_1.z.literal('SESSION_LIST_ERROR'),
message: zod_1.z.string(),
details: zod_1.z.any().optional(),
}),
});
/**
* SSE Streaming Endpoint Schema
* GET /api/v1/events/remediations
* PRD #425: Real-time remediation session events via Server-Sent Events
*/
exports.RemediationSSEEventSchema = zod_1.z.object({
event: zod_1.z.enum(['session-created', 'session-updated']).describe('SSE event type'),
data: zod_1.z.object({
sessionId: zod_1.z.string().describe('Session ID'),
toolName: zod_1.z.string().describe('Tool that owns the session'),
status: zod_1.z.string().describe('Current session status'),
issue: zod_1.z.string().describe('Issue being investigated'),
timestamp: zod_1.z.string().describe('Event timestamp'),
}),
}).describe('SSE event for remediation session changes (Content-Type: text/event-stream)');