import { artifact } from "@ai-sdk-tools/artifacts"; import { z } from "zod"; export const spendingArtifact = artifact( "spending-canvas", z.object({ // Processing stage stage: z.enum([ "loading", "chart_ready", "metrics_ready", "analysis_ready", ]), // Basic info currency: z.string(), from: z.string().optional().describe("Start date (ISO 8601)"), to: z.string().optional().describe("End date (ISO 8601)"), description: z .string() .optional() .describe("Generated description based on date range"), // Chart data (available at chart_ready stage) chart: z .object({ monthlyData: z.array( z.object({ month: z.string(), amount: z.number(), average: z.number(), }), ), }) .optional(), // Core metrics (available at metrics_ready stage) metrics: z .object({ totalSpending: z.number(), averageMonthlySpending: z.number(), currentMonthSpending: z.number(), topCategory: z .object({ name: z.string(), amount: z.number(), percentage: z.number(), }) .optional(), }) .optional(), // Transactions data (available at metrics_ready stage) transactions: z .array( z.object({ id: z.string(), date: z.string(), vendor: z.string(), category: z.string(), amount: z.number(), share: z.number(), }), ) .optional(), // Analysis data (available at analysis_ready stage) analysis: z .object({ summary: z.string(), recommendations: z.array(z.string()), }) .optional(), }), );