yamchart 0.9.5 → 0.10.1

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 (92) hide show
  1. package/dist/{advisor-SC64RTZO.js → advisor-5TJDNAY7.js} +24 -14
  2. package/dist/advisor-5TJDNAY7.js.map +1 -0
  3. package/dist/agent-TZZHNDPK.js +1 -0
  4. package/dist/{chunk-NXQ6ZO3V.js → chunk-5FHV22X2.js} +7 -6
  5. package/dist/chunk-5FHV22X2.js.map +1 -0
  6. package/dist/{dist-MNXSMGV6.js → chunk-64CI3HSY.js} +184 -15
  7. package/dist/chunk-64CI3HSY.js.map +1 -0
  8. package/dist/chunk-7D4SUZUM.js +1 -0
  9. package/dist/chunk-DZVT6PHW.js +1 -0
  10. package/dist/chunk-EAQXUGP6.js +1 -0
  11. package/dist/chunk-HJVVHYVN.js +1 -0
  12. package/dist/chunk-IVD4OP3K.js +1 -0
  13. package/dist/{chunk-S7YQXEKM.js → chunk-QUIDZO5G.js} +104 -275
  14. package/dist/chunk-QUIDZO5G.js.map +1 -0
  15. package/dist/{chunk-RMIDEBHD.js → chunk-S2CH4HUZ.js} +7 -6
  16. package/dist/chunk-TZKNU5TD.js +1 -0
  17. package/dist/chunk-UFDQ3C7Q.js +919 -0
  18. package/dist/chunk-UFDQ3C7Q.js.map +1 -0
  19. package/dist/chunk-VJC24RKT.js +1 -0
  20. package/dist/chunk-WYS4ULBE.js +1 -0
  21. package/dist/{chunk-H4L3FNLS.js → chunk-ZBCQNWVN.js} +3 -2
  22. package/dist/{chunk-RM6MNDVF.js → chunk-ZIY22VO7.js} +193 -11
  23. package/dist/chunk-ZIY22VO7.js.map +1 -0
  24. package/dist/chunk-ZMJPRNOA.js +1 -0
  25. package/dist/compare-RQFCEZIK.js +1 -0
  26. package/dist/connection-utils-FEUWER5I.js +20 -0
  27. package/dist/{describe-X75C2VDU.js → describe-MEP72B56.js} +7 -6
  28. package/dist/{dev-GWXHBBWB.js → dev-H6SJZ5UA.js} +1315 -73
  29. package/dist/dev-H6SJZ5UA.js.map +1 -0
  30. package/dist/dist-5DQO6L2S.js +48 -0
  31. package/dist/dist-MIKFZKSD.js +1 -0
  32. package/dist/dist-PPAD6KOM.js +99 -0
  33. package/dist/{dist-JMLAZUL7.js → dist-XNCED7JW.js} +30 -12
  34. package/dist/generate-B7FAWVIQ.js +1 -0
  35. package/dist/index.js +25 -24
  36. package/dist/init-SECXKD5G.js +1 -0
  37. package/dist/lineage-HYO4RKZT.js +1 -0
  38. package/dist/public/assets/DataView-DUCz_96y.js +9 -0
  39. package/dist/public/assets/{EventManagement-CTuAJ0eF.js → EventManagement-BnmeJDQl.js} +1 -1
  40. package/dist/public/assets/{ExplorePage-ZJ3zNjNQ.js → ExplorePage-kk4z9ldZ.js} +1 -1
  41. package/dist/public/assets/{LoginPage-wygea4BI.js → LoginPage-CzaFkkjg.js} +1 -1
  42. package/dist/public/assets/{PublicViewer-8YqGrVVB.js → PublicViewer-irjxqH6a.js} +1 -1
  43. package/dist/public/assets/{SetupWizard-DqDBwHrF.js → SetupWizard-ConWIcmy.js} +1 -1
  44. package/dist/public/assets/{ShareManagement-TAAdI_gY.js → ShareManagement-CP4wdwLR.js} +1 -1
  45. package/dist/public/assets/SourceDetailView-DZS5518E.js +1 -0
  46. package/dist/public/assets/{UserManagement-B4kZHyri.js → UserManagement-AubGd9hl.js} +1 -1
  47. package/dist/public/assets/data-3vtzSuAZ.js +1 -0
  48. package/dist/public/assets/{index-CfyF2Wf-.css → index-C1X8RW4Z.css} +1 -1
  49. package/dist/public/assets/{index-BgzSjgIu.js → index-jlfTO7f5.js} +44 -44
  50. package/dist/public/assets/{index.es-AB-GdGyc.js → index.es-CgnvEWi5.js} +1 -1
  51. package/dist/public/assets/{jspdf.es.min-ChRx2mOQ.js → jspdf.es.min-Cw5WefMt.js} +3 -3
  52. package/dist/public/index.html +2 -2
  53. package/dist/{query-QNRDS74I.js → query-2H3YOPI2.js} +6 -5
  54. package/dist/reset-password-YVCZKZPC.js +1 -0
  55. package/dist/rewrite-database-BOA4QPUR.js +1 -0
  56. package/dist/{sample-SKLHBZBU.js → sample-ODUGGSFA.js} +6 -5
  57. package/dist/{search-4KMETZVX.js → search-IPE4ISFB.js} +7 -6
  58. package/dist/{semantic-6WKELH5V.js → semantic-K3MYXXJI.js} +4 -2
  59. package/dist/{semantic-6WKELH5V.js.map → semantic-K3MYXXJI.js.map} +1 -1
  60. package/dist/source-resolver-HZQLOODU.js +19 -0
  61. package/dist/source-resolver-HZQLOODU.js.map +1 -0
  62. package/dist/sync-dbt-72GVO75P.js +1 -0
  63. package/dist/{sync-warehouse-UWRNUXE7.js → sync-warehouse-TUNULDUY.js} +6 -5
  64. package/dist/{tables-V65QUGHK.js → tables-K5NAN2WK.js} +7 -6
  65. package/dist/templates/default/docs/yamchart-reference.md +42 -0
  66. package/dist/{test-UE5OWG3E.js → test-SRHVOXZB.js} +9 -7
  67. package/dist/{test-UE5OWG3E.js.map → test-SRHVOXZB.js.map} +1 -1
  68. package/dist/update-HWCJNQRP.js +1 -0
  69. package/package.json +8 -6
  70. package/dist/advisor-SC64RTZO.js.map +0 -1
  71. package/dist/chunk-NXQ6ZO3V.js.map +0 -1
  72. package/dist/chunk-RM6MNDVF.js.map +0 -1
  73. package/dist/chunk-S7YQXEKM.js.map +0 -1
  74. package/dist/chunk-UND73EOB.js +0 -449
  75. package/dist/chunk-UND73EOB.js.map +0 -1
  76. package/dist/connection-utils-C4FQGBW6.js +0 -19
  77. package/dist/dev-GWXHBBWB.js.map +0 -1
  78. package/dist/dist-MNXSMGV6.js.map +0 -1
  79. package/dist/dist-MX5K2ABB.js +0 -56
  80. package/dist/source-resolver-R7WBIL7M.js +0 -18
  81. /package/dist/{chunk-RMIDEBHD.js.map → chunk-S2CH4HUZ.js.map} +0 -0
  82. /package/dist/{chunk-H4L3FNLS.js.map → chunk-ZBCQNWVN.js.map} +0 -0
  83. /package/dist/{connection-utils-C4FQGBW6.js.map → connection-utils-FEUWER5I.js.map} +0 -0
  84. /package/dist/{describe-X75C2VDU.js.map → describe-MEP72B56.js.map} +0 -0
  85. /package/dist/{dist-JMLAZUL7.js.map → dist-5DQO6L2S.js.map} +0 -0
  86. /package/dist/{dist-MX5K2ABB.js.map → dist-PPAD6KOM.js.map} +0 -0
  87. /package/dist/{source-resolver-R7WBIL7M.js.map → dist-XNCED7JW.js.map} +0 -0
  88. /package/dist/{query-QNRDS74I.js.map → query-2H3YOPI2.js.map} +0 -0
  89. /package/dist/{sample-SKLHBZBU.js.map → sample-ODUGGSFA.js.map} +0 -0
  90. /package/dist/{search-4KMETZVX.js.map → search-IPE4ISFB.js.map} +0 -0
  91. /package/dist/{sync-warehouse-UWRNUXE7.js.map → sync-warehouse-TUNULDUY.js.map} +0 -0
  92. /package/dist/{tables-V65QUGHK.js.map → tables-K5NAN2WK.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../packages/query/src/presets.ts","../../../packages/query/src/semantic/field-classifier.ts","../../../packages/query/src/semantic/model-builder.ts","../../../packages/query/src/semantic/query-compiler.ts","../../../packages/query/src/semantic/validators.ts","../../../packages/query/src/semantic/loader.ts","../../../packages/query/src/semantic/dialect.ts","../../../packages/query/src/semantic/metric-compiler.ts"],"sourcesContent":["import {\n subDays,\n subWeeks,\n subMonths,\n subYears,\n subQuarters,\n addDays,\n addWeeks,\n addMonths,\n addYears,\n addQuarters,\n startOfDay,\n startOfWeek,\n startOfYear,\n startOfMonth,\n startOfQuarter,\n endOfDay,\n endOfWeek,\n endOfMonth,\n endOfQuarter,\n endOfYear,\n differenceInDays,\n parseISO,\n format,\n} from 'date-fns';\n\nexport interface DateRange {\n start_date: string;\n end_date: string;\n}\n\nexport interface CustomDateRange {\n type: 'custom';\n start: string;\n end: string;\n}\n\n/**\n * Check if a value is a custom date range object.\n */\nexport function isCustomDateRange(value: unknown): value is CustomDateRange {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n (value as CustomDateRange).type === 'custom' &&\n 'start' in value &&\n 'end' in value\n );\n}\n\n/**\n * Expand a custom date range into start_date and end_date.\n */\nexport function expandCustomDateRange(range: CustomDateRange): DateRange {\n return {\n start_date: range.start,\n end_date: range.end,\n };\n}\n\nexport const DATE_PRESETS = [\n 'today',\n 'yesterday',\n 'last_7_days',\n 'last_30_days',\n 'last_90_days',\n 'last_12_months',\n 'year_to_date',\n 'month_to_date',\n 'quarter_to_date',\n 'previous_month',\n 'previous_quarter',\n 'previous_year',\n] as const;\n\nexport type DatePreset = (typeof DATE_PRESETS)[number];\n\nconst DATE_FORMAT = 'yyyy-MM-dd';\n\nfunction formatDate(date: Date): string {\n return format(date, DATE_FORMAT);\n}\n\n/**\n * Expand a date preset into start_date and end_date.\n * Returns null if preset is not recognized.\n */\nexport function expandDatePreset(preset: string): DateRange | null {\n const now = new Date();\n const today = formatDate(now);\n\n switch (preset) {\n case 'today':\n return {\n start_date: today,\n end_date: today,\n };\n\n case 'yesterday': {\n const yesterday = formatDate(subDays(now, 1));\n return {\n start_date: yesterday,\n end_date: yesterday,\n };\n }\n\n case 'last_7_days': {\n const yesterday = formatDate(subDays(now, 1));\n return {\n start_date: formatDate(subDays(now, 7)),\n end_date: yesterday,\n };\n }\n\n case 'last_30_days': {\n const yesterday = formatDate(subDays(now, 1));\n return {\n start_date: formatDate(subDays(now, 30)),\n end_date: yesterday,\n };\n }\n\n case 'last_90_days': {\n const yesterday = formatDate(subDays(now, 1));\n return {\n start_date: formatDate(subDays(now, 90)),\n end_date: yesterday,\n };\n }\n\n case 'last_12_months': {\n const yesterday = formatDate(subDays(now, 1));\n return {\n start_date: formatDate(subMonths(now, 12)),\n end_date: yesterday,\n };\n }\n\n case 'year_to_date':\n return {\n start_date: formatDate(startOfYear(now)),\n end_date: today,\n };\n\n case 'month_to_date':\n return {\n start_date: formatDate(startOfMonth(now)),\n end_date: today,\n };\n\n case 'quarter_to_date':\n return {\n start_date: formatDate(startOfQuarter(now)),\n end_date: today,\n };\n\n case 'previous_month': {\n const lastMonth = subMonths(now, 1);\n return {\n start_date: formatDate(startOfMonth(lastMonth)),\n end_date: formatDate(endOfMonth(lastMonth)),\n };\n }\n\n case 'previous_quarter': {\n const lastQuarter = subMonths(now, 3);\n return {\n start_date: formatDate(startOfQuarter(lastQuarter)),\n end_date: formatDate(endOfQuarter(lastQuarter)),\n };\n }\n\n case 'previous_year': {\n const lastYear = subYears(now, 1);\n return {\n start_date: formatDate(startOfYear(lastYear)),\n end_date: formatDate(endOfYear(lastYear)),\n };\n }\n\n default:\n return null;\n }\n}\n\n/**\n * Compute the equivalent previous period for a given date range.\n * Uses semantic shifting for named presets, day-length shifting for custom ranges.\n */\nexport function computePreviousPeriod(\n startDate: string,\n endDate: string,\n presetName?: string\n): DateRange {\n const start = parseISO(startDate);\n const end = parseISO(endDate);\n\n switch (presetName) {\n case 'today':\n case 'yesterday': {\n return {\n start_date: formatDate(subDays(start, 1)),\n end_date: formatDate(subDays(end, 1)),\n };\n }\n case 'last_7_days': {\n return {\n start_date: formatDate(subDays(start, 7)),\n end_date: formatDate(subDays(end, 7)),\n };\n }\n case 'last_30_days': {\n return {\n start_date: formatDate(subDays(start, 30)),\n end_date: formatDate(subDays(end, 30)),\n };\n }\n case 'last_90_days': {\n return {\n start_date: formatDate(subDays(start, 90)),\n end_date: formatDate(subDays(end, 90)),\n };\n }\n case 'last_12_months':\n case 'last_365_days': {\n return {\n start_date: formatDate(subMonths(start, 12)),\n end_date: formatDate(subMonths(end, 12)),\n };\n }\n case 'year_to_date': {\n return {\n start_date: formatDate(subYears(start, 1)),\n end_date: formatDate(subYears(end, 1)),\n };\n }\n case 'month_to_date': {\n return {\n start_date: formatDate(subMonths(start, 1)),\n end_date: formatDate(subMonths(end, 1)),\n };\n }\n case 'quarter_to_date': {\n return {\n start_date: formatDate(subQuarters(start, 1)),\n end_date: formatDate(subQuarters(end, 1)),\n };\n }\n case 'previous_month': {\n const shifted = subMonths(start, 1);\n return {\n start_date: formatDate(startOfMonth(shifted)),\n end_date: formatDate(endOfMonth(shifted)),\n };\n }\n case 'previous_quarter': {\n const shifted = subQuarters(start, 1);\n return {\n start_date: formatDate(startOfQuarter(shifted)),\n end_date: formatDate(endOfQuarter(shifted)),\n };\n }\n case 'previous_year': {\n const shifted = subYears(start, 1);\n return {\n start_date: formatDate(startOfYear(shifted)),\n end_date: formatDate(endOfYear(shifted)),\n };\n }\n default: {\n // Custom range: shift back by the range length in days\n const days = differenceInDays(end, start);\n return {\n start_date: formatDate(subDays(start, days)),\n end_date: formatDate(subDays(end, days)),\n };\n }\n }\n}\n\n/**\n * Format a date range as a human-readable label.\n * Same year: \"Jan 17 – Feb 16\"\n * Cross year: \"Dec 18, 2025 – Jan 17, 2026\"\n * Single day: \"Feb 16\"\n */\nexport function formatPeriodLabel(startDate: string, endDate: string): string {\n const start = parseISO(startDate);\n const end = parseISO(endDate);\n\n if (startDate === endDate) {\n return format(start, 'MMM d');\n }\n\n const startYear = start.getFullYear();\n const endYear = end.getFullYear();\n\n if (startYear === endYear) {\n return `${format(start, 'MMM d')} – ${format(end, 'MMM d')}`;\n }\n\n return `${format(start, 'MMM d, yyyy')} – ${format(end, 'MMM d, yyyy')}`;\n}\n\n/**\n * Check if a string is a known date preset.\n */\nexport function isDatePreset(value: string): value is DatePreset {\n return DATE_PRESETS.includes(value as DatePreset);\n}\n\n// --- Relative date range support ---\n\nexport interface RelativeDateRange {\n type: 'relative';\n direction: 'previous' | 'current' | 'next';\n value?: number;\n unit: 'day' | 'week' | 'month' | 'quarter' | 'year';\n includeToday?: boolean;\n}\n\n/**\n * Check if a value is a relative date range object.\n */\nexport function isRelativeDateRange(value: unknown): value is RelativeDateRange {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n (value as RelativeDateRange).type === 'relative'\n );\n}\n\n/**\n * Expand a relative date range into start_date and end_date.\n */\nexport function expandRelativeDateRange(rel: RelativeDateRange): DateRange {\n const now = new Date();\n const today = startOfDay(now);\n\n if (rel.direction === 'current') {\n switch (rel.unit) {\n case 'day':\n return { start_date: formatDate(today), end_date: formatDate(today) };\n case 'week':\n return {\n start_date: formatDate(startOfWeek(today, { weekStartsOn: 1 })),\n end_date: formatDate(endOfWeek(today, { weekStartsOn: 1 })),\n };\n case 'month':\n return { start_date: formatDate(startOfMonth(today)), end_date: formatDate(endOfMonth(today)) };\n case 'quarter':\n return { start_date: formatDate(startOfQuarter(today)), end_date: formatDate(endOfQuarter(today)) };\n case 'year':\n return { start_date: formatDate(startOfYear(today)), end_date: formatDate(endOfYear(today)) };\n }\n }\n\n const n = rel.value ?? 1;\n\n if (rel.direction === 'previous') {\n const end = rel.includeToday ? today : subDays(today, 1);\n const shiftFns = { day: subDays, week: subWeeks, month: subMonths, quarter: subQuarters, year: subYears };\n const start = shiftFns[rel.unit](rel.includeToday ? today : today, n);\n return {\n start_date: formatDate(start < end ? start : end),\n end_date: formatDate(start < end ? end : start),\n };\n }\n\n // next\n const start = rel.includeToday ? today : addDays(today, 1);\n const shiftFns = { day: addDays, week: addWeeks, month: addMonths, quarter: addQuarters, year: addYears };\n const end = shiftFns[rel.unit](start, n);\n return {\n start_date: formatDate(start < end ? start : end),\n end_date: formatDate(start < end ? end : start),\n };\n}\n","import type { MeasureType, DimensionType } from '@yamchart/schema';\nimport type { CatalogColumn } from './types.js';\n\nexport interface FieldClassification {\n role: 'measure' | 'dimension';\n measureType?: MeasureType;\n dimensionType?: DimensionType;\n}\n\ninterface ClassifyInput {\n name: string;\n data_type?: string;\n description?: string;\n}\n\n// --- Name pattern matchers ---\n\nconst DIMENSION_ID_PATTERN = /(_id|_key|_code)$/i;\nconst DIMENSION_NAME_PATTERN = /(_name|_label|_title|_slug)$/i;\nconst DIMENSION_TYPE_PATTERN = /(_type|_status|_category|_class|_group|_tier|_level|_kind|_role)$/i;\nconst DIMENSION_EXACT = new Set([\n 'id', 'name', 'category', 'channel', 'country', 'region', 'city', 'state',\n 'source', 'medium', 'campaign', 'status', 'type', 'tier', 'segment',\n 'department', 'team', 'brand', 'product', 'currency', 'email', 'url',\n]);\n\nconst TIME_PATTERN = /(_at|_date|_time|_timestamp|_ts|_day|_week|_month|_year|_quarter)$/i;\nconst TIME_EXACT = new Set([\n 'date', 'period', 'timestamp', 'date_day', 'month', 'year', 'quarter', 'week',\n 'created', 'updated', 'deleted', 'started', 'ended',\n]);\n\nconst MEASURE_COUNT_PATTERN = /(_count$|^count_|^num_|^number_of_|_total_count$)/i;\nconst MEASURE_AMOUNT_PATTERN = /(_amount$|_total$|_revenue$|_cost$|_price$|_spend$|_profit$|_margin$|_fee$|_tax$|_discount$|_balance$|_qty$|_quantity$|_sum$|_volume$|_weight$|_size$|_value$|_rate$|_ratio$|_score$|_percent$|_pct$)/i;\nconst MEASURE_EXACT = new Set([\n 'quantity', 'revenue', 'amount', 'total', 'cost', 'price', 'profit', 'margin',\n 'balance', 'score', 'rate', 'ratio', 'volume', 'weight', 'spend', 'fee',\n]);\nconst MEASURE_AVG_PATTERN = /(_avg$|_average$|_mean$|^avg_|^average_|^mean_)/i;\nconst MEASURE_MIN_PATTERN = /(^min_|_min$)/i;\nconst MEASURE_MAX_PATTERN = /(^max_|_max$)/i;\n\n// --- Data type matchers ---\n\nconst NUMERIC_TYPES = /^(number|numeric|int|integer|bigint|smallint|tinyint|float|double|decimal|real|money)/i;\nconst STRING_TYPES = /^(varchar|text|string|char|nchar|nvarchar|clob|binary|varbinary)/i;\nconst TIME_TYPES = /^(date|time|timestamp|datetime|interval)/i;\nconst BOOLEAN_TYPES = /^(bool|boolean|bit)/i;\n\n// --- Description keyword matchers ---\n\nconst MEASURE_DESCRIPTION_KEYWORDS = /\\b(total|sum of|count of|number of|amount|revenue|average|aggregate)\\b/i;\n\nexport function classifyField(input: ClassifyInput): FieldClassification {\n const name = input.name.toLowerCase();\n\n // Priority 3: Strong name heuristics (check first because they override data_type)\n\n // Time dimensions\n if (TIME_PATTERN.test(name) || TIME_EXACT.has(name)) {\n return { role: 'dimension', dimensionType: 'time' };\n }\n\n // Dimension IDs, names, types\n if (DIMENSION_ID_PATTERN.test(name) || DIMENSION_NAME_PATTERN.test(name) ||\n DIMENSION_TYPE_PATTERN.test(name) || DIMENSION_EXACT.has(name)) {\n return { role: 'dimension', dimensionType: 'string' };\n }\n\n // Measure patterns\n if (MEASURE_COUNT_PATTERN.test(name)) {\n return { role: 'measure', measureType: 'count' };\n }\n if (MEASURE_AVG_PATTERN.test(name)) {\n return { role: 'measure', measureType: 'avg' };\n }\n if (MEASURE_MIN_PATTERN.test(name)) {\n return { role: 'measure', measureType: 'min' };\n }\n if (MEASURE_MAX_PATTERN.test(name)) {\n return { role: 'measure', measureType: 'max' };\n }\n if (MEASURE_AMOUNT_PATTERN.test(name) || MEASURE_EXACT.has(name)) {\n return { role: 'measure', measureType: 'sum' };\n }\n\n // Priority 2: Data type (when name is ambiguous)\n if (input.data_type) {\n if (TIME_TYPES.test(input.data_type)) {\n return { role: 'dimension', dimensionType: 'time' };\n }\n if (BOOLEAN_TYPES.test(input.data_type)) {\n return { role: 'dimension', dimensionType: 'boolean' };\n }\n if (NUMERIC_TYPES.test(input.data_type)) {\n return { role: 'measure', measureType: 'sum' };\n }\n if (STRING_TYPES.test(input.data_type)) {\n return { role: 'dimension', dimensionType: 'string' };\n }\n }\n\n // Priority 4: Description keywords\n if (input.description && MEASURE_DESCRIPTION_KEYWORDS.test(input.description)) {\n return { role: 'measure', measureType: 'sum' };\n }\n\n // Priority 5: Fallback — unknown → dimension (safer default)\n return { role: 'dimension', dimensionType: 'string' };\n}\n\nexport function inferAggregationType(name: string): MeasureType {\n const lower = name.toLowerCase();\n if (MEASURE_COUNT_PATTERN.test(lower) || lower.startsWith('num_')) return 'count';\n if (MEASURE_AVG_PATTERN.test(lower)) return 'avg';\n if (MEASURE_MIN_PATTERN.test(lower)) return 'min';\n if (MEASURE_MAX_PATTERN.test(lower)) return 'max';\n return 'sum';\n}\n\nexport function classifyCatalogColumns(columns: CatalogColumn[]): {\n measures: Array<{ name: string; type: MeasureType; description?: string }>;\n dimensions: Array<{ name: string; type: DimensionType; description?: string }>;\n} {\n const measures: Array<{ name: string; type: MeasureType; description?: string }> = [];\n const dimensions: Array<{ name: string; type: DimensionType; description?: string }> = [];\n\n for (const col of columns) {\n const result = classifyField({\n name: col.name,\n data_type: col.data_type,\n description: col.description,\n });\n\n if (result.role === 'measure') {\n measures.push({\n name: col.name,\n type: result.measureType ?? 'sum',\n description: col.description || undefined,\n });\n } else {\n dimensions.push({\n name: col.name,\n type: result.dimensionType ?? 'string',\n description: col.description || undefined,\n });\n }\n }\n\n return { measures, dimensions };\n}\n","import type { SemanticModel, SemanticEntity, Measure, Dimension, SemanticConfig } from '@yamchart/schema';\nimport type { CatalogData, CatalogEntry, GoldFilterConfig } from './types.js';\nimport { classifyCatalogColumns } from './field-classifier.js';\n\nconst DEFAULT_FILTER: GoldFilterConfig = {\n paths: ['gold/', 'marts/', 'core/'],\n prefixes: ['dim_', 'fct_', 'fact_'],\n};\n\ninterface YamchartModel {\n name: string;\n description?: string;\n sql: string;\n metadata: {\n name: string;\n description?: string;\n returns?: Array<{ name: string; type?: string }>;\n params?: Array<{ name: string; type: string; default?: string | number; options?: string[] }>;\n };\n sourceTable?: string;\n}\n\ninterface ChartHint {\n modelName: string;\n measures: string[];\n dimensions: string[];\n timeDimensions: string[];\n formats: Record<string, string>;\n}\n\nexport interface BuildInput {\n catalog?: CatalogData;\n models?: YamchartModel[];\n chartHints?: ChartHint[];\n}\n\nexport class SemanticModelBuilder {\n private filter: GoldFilterConfig;\n\n constructor(config?: SemanticConfig) {\n this.filter = config?.include ?? DEFAULT_FILTER;\n }\n\n build(input: BuildInput): SemanticModel {\n const { catalog, models, chartHints } = input;\n\n // Step 1: Build catalog entities (gold only)\n const catalogEntities = catalog ? this.buildCatalogEntities(catalog) : [];\n\n // Step 2: Build yamchart model entities\n const modelEntities = models ? this.buildModelEntities(models) : [];\n\n // Step 3: Apply chart hints to enrich classification\n const allEntities = [...catalogEntities, ...modelEntities];\n if (chartHints) {\n this.applyChartHints(allEntities, chartHints);\n }\n\n // Step 4: Merge — yamchart model wins over catalog for same source_table\n const merged = this.mergeEntities(catalogEntities, modelEntities);\n\n // Step 5: Extract relationships\n const relationships = catalog ? this.extractRelationships(catalog, merged) : [];\n\n return {\n entities: merged,\n relationships,\n generated_at: new Date().toISOString(),\n };\n }\n\n private isGoldModel(entry: CatalogEntry): boolean {\n const path = entry.path?.toLowerCase() ?? '';\n const name = entry.name.toLowerCase();\n\n const pathMatch = this.filter.paths.some((p) => path.includes(p.toLowerCase()));\n const prefixMatch = this.filter.prefixes.some((p) => name.startsWith(p.toLowerCase()));\n\n return pathMatch || prefixMatch;\n }\n\n private buildCatalogEntities(catalog: CatalogData): SemanticEntity[] {\n return catalog.models\n .filter((entry) => this.isGoldModel(entry))\n .filter((entry) => entry.table) // must have a table path\n .map((entry) => {\n const { measures, dimensions } = classifyCatalogColumns(entry.columns ?? []);\n return {\n name: entry.name,\n description: entry.description && entry.description !== 'No description'\n ? entry.description\n : undefined,\n source: 'catalog' as const,\n source_table: entry.table!,\n measures,\n dimensions,\n };\n });\n }\n\n private buildModelEntities(models: YamchartModel[]): SemanticEntity[] {\n return models\n .filter((m) => m.metadata.returns && m.metadata.returns.length > 0)\n .map((m) => {\n const measures: Measure[] = [];\n const dimensions: Dimension[] = [];\n\n for (const col of m.metadata.returns!) {\n const colType = col.type?.toLowerCase();\n if (colType === 'number') {\n measures.push({\n name: col.name,\n type: this.inferAggType(col.name),\n });\n } else if (colType === 'date' || colType === 'datetime' || colType === 'timestamp') {\n dimensions.push({ name: col.name, type: 'time' });\n } else {\n dimensions.push({ name: col.name, type: 'string' });\n }\n }\n\n const parameters = m.metadata.params?.map((p) => ({\n name: p.name,\n type: p.type,\n default: p.default,\n options: p.options,\n }));\n\n return {\n name: m.name,\n description: m.description ?? m.metadata.description,\n source: 'model' as const,\n source_table: m.sourceTable ?? m.name,\n measures,\n dimensions,\n parameters: parameters?.length ? parameters : undefined,\n };\n });\n }\n\n private inferAggType(name: string): Measure['type'] {\n const lower = name.toLowerCase();\n if (/(_count$|^count_|^num_)/.test(lower)) return 'count';\n if (/(_avg$|_average$|_mean$|^avg_)/.test(lower)) return 'avg';\n if (/(^min_|_min$)/.test(lower)) return 'min';\n if (/(^max_|_max$)/.test(lower)) return 'max';\n return 'sum';\n }\n\n private applyChartHints(entities: SemanticEntity[], hints: ChartHint[]): void {\n for (const hint of hints) {\n const entity = entities.find((e) =>\n e.name === hint.modelName || e.source_table.toLowerCase().includes(hint.modelName.toLowerCase())\n );\n if (!entity) continue;\n\n // Promote fields to measures if chart uses them as y-axis\n for (const measureName of hint.measures) {\n const dimIdx = entity.dimensions.findIndex((d) => d.name === measureName);\n if (dimIdx !== -1) {\n const dim = entity.dimensions.splice(dimIdx, 1)[0]!;\n entity.measures.push({ name: dim.name, type: this.inferAggType(dim.name) });\n }\n }\n\n // Promote fields to time dimensions if chart uses them as temporal x-axis\n for (const timeDim of hint.timeDimensions) {\n const dim = entity.dimensions.find((d) => d.name === timeDim);\n if (dim) dim.type = 'time';\n }\n\n // Apply format hints\n for (const [field, format] of Object.entries(hint.formats)) {\n const measure = entity.measures.find((m) => m.name === field);\n if (measure) measure.format = format;\n }\n }\n }\n\n private mergeEntities(catalogEntities: SemanticEntity[], modelEntities: SemanticEntity[]): SemanticEntity[] {\n // Collect source tables claimed by yamchart models\n const modelTables = new Set(\n modelEntities.map((e) => e.source_table.toLowerCase())\n );\n\n // Filter out catalog entities whose source_table is claimed by a model entity\n const filteredCatalog = catalogEntities.filter(\n (e) => !modelTables.has(e.source_table.toLowerCase())\n );\n\n return [...filteredCatalog, ...modelEntities];\n }\n\n private extractRelationships(catalog: CatalogData, entities: SemanticEntity[]): SemanticModel['relationships'] {\n const entityNames = new Set(entities.map((e) => e.name));\n const relationships: SemanticModel['relationships'] = [];\n\n for (const entry of catalog.models) {\n if (!entityNames.has(entry.name)) continue;\n if (!entry.dependsOn) continue;\n\n for (const dep of entry.dependsOn) {\n // dependsOn format: \"model.project_name.model_name\"\n const parts = dep.split('.');\n const depName = parts[parts.length - 1]!;\n if (!entityNames.has(depName)) continue;\n\n // Find shared column names (likely join keys)\n const fromEntity = entities.find((e) => e.name === entry.name);\n const toEntity = entities.find((e) => e.name === depName);\n if (!fromEntity || !toEntity) continue;\n\n const fromFields = [...fromEntity.measures, ...fromEntity.dimensions].map((f) => f.name.toLowerCase());\n const toFields = [...toEntity.measures, ...toEntity.dimensions].map((f) => f.name.toLowerCase());\n const shared = fromFields.filter((f) => toFields.includes(f) && f.endsWith('_id'));\n\n if (shared.length > 0) {\n relationships.push({\n from: { entity: entry.name, field: shared[0]! },\n to: { entity: depName, field: shared[0]! },\n type: 'many_to_one',\n });\n }\n }\n }\n\n return relationships;\n }\n}\n","import type { SemanticModel, SemanticQuery, SemanticFilter, MeasureType } from '@yamchart/schema';\n\nexport class SemanticQueryCompiler {\n compile(model: SemanticModel, query: SemanticQuery): string {\n const entity = model.entities.find((e) => e.name === query.model);\n if (!entity) throw new Error(`Entity '${query.model}' not found`);\n\n const selectParts: string[] = [];\n const groupByParts: string[] = [];\n\n // Dimensions\n for (const dimName of query.dimensions) {\n selectParts.push(`\"${dimName}\"`);\n groupByParts.push(`\"${dimName}\"`);\n }\n\n // Measures with aggregation\n for (const measureName of query.measures) {\n const measure = entity.measures.find((m) => m.name === measureName);\n if (!measure) throw new Error(`Measure '${measureName}' not found`);\n selectParts.push(`${this.formatMeasure(measure.type, measureName)} AS \"${measureName}\"`);\n }\n\n // Build SQL\n const parts: string[] = [];\n parts.push(`SELECT ${selectParts.join(', ')}`);\n parts.push(`FROM ${entity.source_table}`);\n\n // WHERE\n if (query.filters.length > 0) {\n const conditions = query.filters.map((f) => this.compileFilter(f));\n parts.push(`WHERE ${conditions.join(' AND ')}`);\n }\n\n // GROUP BY\n if (groupByParts.length > 0) {\n parts.push(`GROUP BY ${groupByParts.join(', ')}`);\n }\n\n // ORDER BY\n if (query.order_by) {\n parts.push(`ORDER BY \"${query.order_by.field}\" ${query.order_by.direction.toUpperCase()}`);\n }\n\n // LIMIT\n parts.push(`LIMIT ${query.limit}`);\n\n return parts.join('\\n');\n }\n\n private formatMeasure(type: MeasureType, column: string): string {\n if (type === 'count_distinct') {\n return `COUNT(DISTINCT \"${column}\")`;\n }\n return `${this.aggFunction(type)}(\"${column}\")`;\n }\n\n private aggFunction(type: Exclude<MeasureType, 'count_distinct'>): string {\n switch (type) {\n case 'sum': return 'SUM';\n case 'count': return 'COUNT';\n case 'avg': return 'AVG';\n case 'min': return 'MIN';\n case 'max': return 'MAX';\n }\n }\n\n private compileFilter(filter: SemanticFilter): string {\n const field = `\"${filter.dimension}\"`;\n const value = filter.value;\n\n switch (filter.operator) {\n case 'equals':\n return `${field} = ${this.quoteValue(value)}`;\n case 'not_equals':\n return `${field} != ${this.quoteValue(value)}`;\n case 'contains':\n return `${field} LIKE '%${this.escapeString(String(value))}%'`;\n case 'gt':\n return `${field} > ${this.quoteValue(value)}`;\n case 'gte':\n return `${field} >= ${this.quoteValue(value)}`;\n case 'lt':\n return `${field} < ${this.quoteValue(value)}`;\n case 'lte':\n return `${field} <= ${this.quoteValue(value)}`;\n case 'in':\n return `${field} IN (${(value as Array<string | number>).map((v) => this.quoteValue(v)).join(', ')})`;\n case 'not_in':\n return `${field} NOT IN (${(value as Array<string | number>).map((v) => this.quoteValue(v)).join(', ')})`;\n default:\n throw new Error(`Unknown filter operator: ${filter.operator}`);\n }\n }\n\n private quoteValue(value: string | number | boolean | Array<string | number>): string {\n if (typeof value === 'number') return String(value);\n if (typeof value === 'boolean') return String(value);\n return `'${this.escapeString(String(value))}'`;\n }\n\n private escapeString(value: string): string {\n return value.replace(/'/g, \"''\");\n }\n}\n","import type { SemanticModel, SemanticQuery } from '@yamchart/schema';\n\nexport class SemanticValidationError extends Error {\n code: string;\n available?: string[];\n\n constructor(code: string, message: string, available?: string[]) {\n super(message);\n this.name = 'SemanticValidationError';\n this.code = code;\n this.available = available;\n }\n}\n\nexport function validateSemanticQuery(model: SemanticModel, query: SemanticQuery): void {\n // Validate model exists\n const entity = model.entities.find((e) => e.name === query.model);\n if (!entity) {\n throw new SemanticValidationError(\n 'unknown_model',\n `Unknown model '${query.model}'. Available models: ${model.entities.map((e) => e.name).join(', ')}`,\n model.entities.map((e) => e.name),\n );\n }\n\n const measureNames = entity.measures.map((m) => m.name);\n const dimensionNames = entity.dimensions.map((d) => d.name);\n const allFields = [...measureNames, ...dimensionNames];\n\n // Validate measures\n for (const m of query.measures) {\n if (!measureNames.includes(m)) {\n throw new SemanticValidationError(\n 'unknown_measure',\n `Unknown measure '${m}' on entity '${query.model}'. Available measures: ${measureNames.join(', ')}`,\n measureNames,\n );\n }\n }\n\n // Validate dimensions\n for (const d of query.dimensions) {\n if (!dimensionNames.includes(d)) {\n throw new SemanticValidationError(\n 'unknown_dimension',\n `Unknown dimension '${d}' on entity '${query.model}'. Available dimensions: ${dimensionNames.join(', ')}`,\n dimensionNames,\n );\n }\n }\n\n // Validate filter dimensions\n for (const f of query.filters) {\n if (!dimensionNames.includes(f.dimension)) {\n throw new SemanticValidationError(\n 'unknown_filter_dimension',\n `Unknown filter dimension '${f.dimension}' on entity '${query.model}'. Available dimensions: ${dimensionNames.join(', ')}`,\n dimensionNames,\n );\n }\n }\n\n // Validate order_by field\n if (query.order_by) {\n if (!allFields.includes(query.order_by.field)) {\n throw new SemanticValidationError(\n 'unknown_order_field',\n `Unknown order_by field '${query.order_by.field}' on entity '${query.model}'. Available fields: ${allFields.join(', ')}`,\n allFields,\n );\n }\n }\n}\n","// packages/query/src/semantic/loader.ts\nimport type { SemanticDefinition, CuratedMetric } from '@yamchart/schema';\nimport type { ResolvedEntity } from './metric-compiler.js';\n\nexport interface MetricListItem {\n name: string;\n label?: string;\n description?: string;\n entity: string;\n agg: string;\n synonyms: string[];\n format?: string;\n dimensions: string[];\n}\n\nexport interface ResolvedMetric {\n metric: CuratedMetric;\n entity: ResolvedEntity;\n}\n\nexport interface SemanticLayer {\n listMetrics(): MetricListItem[];\n resolveMetric(nameOrSynonym: string): ResolvedMetric | undefined;\n getEntity(name: string): ResolvedEntity | undefined;\n}\n\nfunction toResolvedEntity(def: SemanticDefinition, resolveTable: (model: string) => string): ResolvedEntity {\n const sourceRef = def.source.table ?? resolveTable(def.source.model!);\n return {\n name: def.entity,\n sourceRef,\n timeDimension: def.time_dimension,\n dimensions: def.dimensions,\n filters: def.filters ?? {},\n metrics: def.metrics,\n };\n}\n\nexport function buildSemanticLayer(\n defs: SemanticDefinition[],\n resolveTable: (model: string) => string = (m) => m,\n): SemanticLayer {\n const entities = defs.map((d) => toResolvedEntity(d, resolveTable));\n const byMetricKey = new Map<string, ResolvedMetric>();\n const list: MetricListItem[] = [];\n\n for (const entity of entities) {\n for (const metric of entity.metrics) {\n const resolved: ResolvedMetric = { metric, entity };\n byMetricKey.set(metric.name.toLowerCase(), resolved);\n for (const syn of metric.synonyms ?? []) {\n if (!byMetricKey.has(syn.toLowerCase())) byMetricKey.set(syn.toLowerCase(), resolved);\n }\n list.push({\n name: metric.name,\n label: metric.label,\n description: metric.description,\n entity: entity.name,\n agg: metric.agg,\n synonyms: metric.synonyms ?? [],\n format: metric.format,\n dimensions: entity.dimensions.map((d) => d.name),\n });\n }\n }\n\n return {\n listMetrics: () => list,\n resolveMetric: (key) => byMetricKey.get(key.toLowerCase()),\n getEntity: (name) => entities.find((e) => e.name === name),\n };\n}\n\n// --- Filesystem loader (project-level, reads semantic/*.yaml) ---\nimport { readFileSync, existsSync, readdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { parse as parseYaml } from 'yaml';\nimport { SemanticDefinitionSchema } from '@yamchart/schema';\n\n/** Load and validate all semantic/*.yaml files under a project dir. */\nexport function loadSemanticDefinitions(projectDir: string): SemanticDefinition[] {\n const dir = join(projectDir, 'semantic');\n if (!existsSync(dir)) return [];\n const defs: SemanticDefinition[] = [];\n for (const file of readdirSync(dir)) {\n if (!/\\.ya?ml$/.test(file)) continue;\n const raw = parseYaml(readFileSync(join(dir, file), 'utf8'));\n const entries = Array.isArray(raw?.entities) ? raw.entities : [raw];\n for (const entry of entries) {\n defs.push(SemanticDefinitionSchema.parse(entry));\n }\n }\n return defs;\n}\n","export type Grain = 'day' | 'week' | 'month' | 'quarter' | 'year';\n\nexport interface Dialect {\n dateTrunc(column: string, grain: Grain): string;\n quoteIdent(ident: string): string;\n}\n\nconst stringFirst: Dialect = {\n dateTrunc: (col, grain) => `date_trunc('${grain}', ${col})`,\n quoteIdent: (id) => `\"${id}\"`,\n};\n\nconst bigquery: Dialect = {\n dateTrunc: (col, grain) => `DATE_TRUNC(${col}, ${grain.toUpperCase()})`,\n quoteIdent: (id) => '`' + id + '`',\n};\n\nexport function getDialect(connectionType: string | undefined): Dialect {\n switch ((connectionType || '').toLowerCase()) {\n case 'bigquery':\n return bigquery;\n case 'duckdb':\n case 'postgres':\n case 'snowflake':\n case 'mysql':\n return stringFirst;\n default:\n return stringFirst; // safe generic fallback\n }\n}\n","// packages/query/src/semantic/metric-compiler.ts\nimport type { CuratedMetric, CuratedDimension, NamedFilter } from '@yamchart/schema';\nimport { getDialect, type Grain } from './dialect.js';\nimport { expandDatePreset } from '../presets.js';\n\nexport interface ResolvedEntity {\n name: string;\n sourceRef: string;\n timeDimension?: string;\n dimensions: CuratedDimension[];\n filters: Record<string, NamedFilter>;\n metrics: CuratedMetric[];\n}\n\nexport interface MetricQuery {\n metrics: string[];\n dimensions?: string[];\n grain?: Grain;\n time_range?: { preset: string } | { start: string; end: string };\n filters?: Array<{ dimension: string; operator: string; value: unknown }>;\n order_by?: { field: string; direction?: 'asc' | 'desc' };\n limit?: number;\n}\n\nconst AGG_FN: Record<string, string> = {\n sum: 'SUM', count: 'COUNT', avg: 'AVG', min: 'MIN', max: 'MAX', count_distinct: 'COUNT(DISTINCT',\n};\n\nfunction aggExpr(metric: CuratedMetric, filterSql?: string): string {\n if (metric.sql) return `${metric.sql} AS ${metric.name}`;\n const inner = filterSql ? `CASE WHEN ${filterSql} THEN ${metric.field} END` : metric.field!;\n if (metric.agg === 'count_distinct') return `COUNT(DISTINCT ${inner}) AS ${metric.name}`;\n return `${AGG_FN[metric.agg]}(${inner}) AS ${metric.name}`;\n}\n\nfunction sqlLiteral(value: unknown): string {\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n if (Array.isArray(value)) return `(${value.map(sqlLiteral).join(', ')})`;\n return `'${String(value).replace(/'/g, \"''\")}'`;\n}\n\nconst OPERATORS: Record<string, string> = {\n equals: '=', not_equals: '!=', gt: '>', gte: '>=', lt: '<', lte: '<=', in: 'IN', not_in: 'NOT IN',\n};\n\n// time_range bounds are LLM-supplied; only accept a literal date or datetime so\n// nothing can break out of the quoted SQL string.\nconst DATE_RE = /^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?Z?)?$/;\n\nexport function compileMetricQuery(\n entity: ResolvedEntity,\n query: MetricQuery,\n connectionType: string | undefined,\n): { sql: string; metrics: CuratedMetric[]; groupCols: string[] } {\n const dialect = getDialect(connectionType);\n const select: string[] = [];\n const groupCols: string[] = [];\n\n // dimensions (with optional time grain on the entity time dimension)\n for (const dimName of query.dimensions ?? []) {\n const dim = entity.dimensions.find((d) => d.name === dimName);\n if (!dim) throw new Error(`Unknown dimension \"${dimName}\" on entity \"${entity.name}\".`);\n if (dim.type === 'time' && query.grain) {\n select.push(`${dialect.dateTrunc(dim.name, query.grain)} AS ${dim.name}`);\n } else {\n select.push(dim.name);\n }\n groupCols.push(dim.name);\n }\n // implicit time grain even without an explicit dimension\n if (query.grain && entity.timeDimension && !(query.dimensions ?? []).includes(entity.timeDimension)) {\n select.unshift(`${dialect.dateTrunc(entity.timeDimension, query.grain)} AS ${entity.timeDimension}`);\n groupCols.unshift(entity.timeDimension);\n }\n\n // metrics\n const resolvedMetrics: CuratedMetric[] = [];\n for (const metricName of query.metrics) {\n const metric = entity.metrics.find((m) => m.name === metricName);\n if (!metric) throw new Error(`Unknown metric \"${metricName}\" on entity \"${entity.name}\".`);\n const filterSql = metric.filter ? entity.filters[metric.filter]?.sql : undefined;\n if (metric.filter && !filterSql) {\n throw new Error(`Metric \"${metricName}\" references unknown filter \"${metric.filter}\".`);\n }\n select.push(aggExpr(metric, filterSql));\n resolvedMetrics.push(metric);\n }\n\n // WHERE\n const where: string[] = [];\n if (query.time_range && entity.timeDimension) {\n let start_date: string;\n let end_date: string;\n if ('preset' in query.time_range) {\n const expanded = expandDatePreset(query.time_range.preset);\n if (!expanded) {\n throw new Error(`Unrecognized date preset \"${query.time_range.preset}\".`);\n }\n start_date = expanded.start_date;\n end_date = expanded.end_date;\n } else {\n start_date = query.time_range.start;\n end_date = query.time_range.end;\n if (!DATE_RE.test(start_date) || !DATE_RE.test(end_date)) {\n throw new Error('time_range.start and time_range.end must be YYYY-MM-DD (optionally with a time).');\n }\n }\n where.push(`${entity.timeDimension} >= '${start_date}'`);\n where.push(`${entity.timeDimension} <= '${end_date}'`);\n }\n for (const f of query.filters ?? []) {\n const op = OPERATORS[f.operator];\n if (!op) throw new Error(`Unsupported filter operator \"${f.operator}\".`);\n // f.dimension is LLM-supplied — only allow declared dimensions, then quote it.\n if (!entity.dimensions.some((d) => d.name === f.dimension)) {\n throw new Error(`Unknown filter dimension \"${f.dimension}\" on entity \"${entity.name}\".`);\n }\n where.push(`${dialect.quoteIdent(f.dimension)} ${op} ${sqlLiteral(f.value)}`);\n }\n\n // assemble\n const lines = [`SELECT ${select.join(', ')}`, `FROM ${entity.sourceRef}`];\n if (where.length) lines.push(`WHERE ${where.join(' AND ')}`);\n if (groupCols.length) lines.push(`GROUP BY ${groupCols.map((_, i) => i + 1).join(', ')}`);\n if (query.order_by) {\n // order_by.field is LLM-supplied — only allow a selected column (a grouped\n // dimension or a metric alias), then quote it.\n const selectable = new Set([...groupCols, ...resolvedMetrics.map((m) => m.name)]);\n if (!selectable.has(query.order_by.field)) {\n throw new Error(`order_by.field \"${query.order_by.field}\" is not a selected column. Choose one of: ${[...selectable].join(', ')}.`);\n }\n lines.push(`ORDER BY ${dialect.quoteIdent(query.order_by.field)} ${(query.order_by.direction ?? 'asc').toUpperCase()}`);\n }\n lines.push(`LIMIT ${query.limit ?? 1000}`);\n\n return { sql: lines.join('\\n'), metrics: resolvedMetrics, groupCols };\n}\n"],"mappings":"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","names":["end","shiftFns","start","format"]}
@@ -1,3 +1,4 @@
1
+ import { createRequire as __yamchartCreateRequire } from 'module'; if (!globalThis.require) globalThis.require = __yamchartCreateRequire(import.meta.url);
1
2
  // src/commands/model-resolver.ts
2
3
  import { readFile } from "fs/promises";
3
4
  import { join } from "path";
@@ -1,3 +1,4 @@
1
+ import { createRequire as __yamchartCreateRequire } from 'module'; if (!globalThis.require) globalThis.require = __yamchartCreateRequire(import.meta.url);
1
2
  // src/dbt/catalog.ts
2
3
  function generateCatalogMd(data) {
3
4
  const lines = [];
@@ -1,3 +1,4 @@
1
+ import { createRequire as __yamchartCreateRequire } from 'module'; if (!globalThis.require) globalThis.require = __yamchartCreateRequire(import.meta.url);
1
2
  import {
2
3
  resolveTableName
3
4
  } from "./chunk-VJC24RKT.js";
@@ -9,7 +10,7 @@ import {
9
10
  import {
10
11
  createConnector,
11
12
  resolveConnection
12
- } from "./chunk-NXQ6ZO3V.js";
13
+ } from "./chunk-5FHV22X2.js";
13
14
 
14
15
  // src/commands/source-resolver.ts
15
16
  import { readFile as readFile2, access as access2 } from "fs/promises";
@@ -369,4 +370,4 @@ export {
369
370
  resolveTablesSource,
370
371
  resolveSearchSource
371
372
  };
372
- //# sourceMappingURL=chunk-H4L3FNLS.js.map
373
+ //# sourceMappingURL=chunk-ZBCQNWVN.js.map
@@ -1,3 +1,4 @@
1
+ import { createRequire as __yamchartCreateRequire } from 'module'; if (!globalThis.require) globalThis.require = __yamchartCreateRequire(import.meta.url);
1
2
  // ../../packages/schema/dist/connection.js
2
3
  import { z } from "zod";
3
4
  var EnvAuthSchema = z.object({
@@ -795,6 +796,21 @@ var CatalogIncludeSchema = z4.object({
795
796
  var CatalogConfigSchema = z4.object({
796
797
  include: CatalogIncludeSchema.optional()
797
798
  });
799
+ var KnowledgeConfigSchema = z4.object({
800
+ database_url_var: z4.string().default("KNOWLEDGE_DATABASE_URL")
801
+ });
802
+ var ProviderConfigSchema = z4.object({
803
+ provider: z4.enum(["anthropic", "openai", "gemini", "ollama", "ollama_cloud", "openai_compatible"]),
804
+ model: z4.string().optional(),
805
+ base_url: z4.string().optional(),
806
+ api_key_var: z4.string().optional()
807
+ });
808
+ var AiConfigSchema = z4.object({
809
+ default: z4.string().optional(),
810
+ providers: z4.record(ProviderConfigSchema).optional(),
811
+ tasks: z4.record(z4.string()).optional(),
812
+ embedding: ProviderConfigSchema.optional()
813
+ }).refine((c) => !c.default || !c.providers || c.default in c.providers, { message: "ai.default must name a provider in ai.providers" }).refine((c) => !c.tasks || !c.providers || Object.values(c.tasks).every((n) => c.providers[n] !== void 0), { message: "every ai.tasks value must name a provider in ai.providers" });
798
814
  var ProjectSchema = z4.object({
799
815
  version: z4.string().min(1),
800
816
  name: z4.string().min(1),
@@ -806,7 +822,9 @@ var ProjectSchema = z4.object({
806
822
  features: FeaturesSchema.optional(),
807
823
  theme: ThemeSchema.optional(),
808
824
  semantic: SemanticConfigSchema,
809
- catalog: CatalogConfigSchema.optional()
825
+ catalog: CatalogConfigSchema.optional(),
826
+ knowledge: KnowledgeConfigSchema.optional(),
827
+ ai: AiConfigSchema.optional()
810
828
  });
811
829
 
812
830
  // ../../packages/schema/dist/model.js
@@ -963,16 +981,159 @@ var EventsFileSchema = z8.object({
963
981
  events: z8.array(EventSchema).default([])
964
982
  });
965
983
 
966
- // ../../packages/schema/dist/agent.js
984
+ // ../../packages/schema/dist/semantic-curated.js
967
985
  import { z as z9 } from "zod";
968
- var AgentDefinitionSchema = z9.object({
969
- name: z9.string(),
970
- title: z9.string().optional(),
971
- description: z9.string(),
972
- system_prompt: z9.string(),
973
- tools: z9.array(z9.string()).default([]),
974
- model: z9.string().optional(),
975
- models: z9.array(z9.string()).optional()
986
+ var CuratedMetricSchema = z9.object({
987
+ name: z9.string().min(1),
988
+ label: z9.string().optional(),
989
+ description: z9.string().optional(),
990
+ agg: MeasureTypeSchema,
991
+ // sum|count|avg|min|max|count_distinct
992
+ field: z9.string().optional(),
993
+ // column to aggregate
994
+ sql: z9.string().optional(),
995
+ // raw aggregate expression (derived metric)
996
+ filter: z9.string().optional(),
997
+ // references a named filter on the entity
998
+ synonyms: z9.array(z9.string()).optional(),
999
+ format: z9.string().optional(),
1000
+ default_time_grain: z9.enum(["day", "week", "month", "quarter", "year"]).optional()
1001
+ }).refine((m) => Boolean(m.field) !== Boolean(m.sql), {
1002
+ message: "metric must specify exactly one of `field` or `sql`"
1003
+ }).refine((m) => !(m.sql && m.filter), {
1004
+ message: "a metric with raw `sql` cannot also set `filter` (embed the condition in the sql expression instead)"
1005
+ });
1006
+ var CuratedDimensionSchema = z9.object({
1007
+ name: z9.string().min(1),
1008
+ type: DimensionTypeSchema,
1009
+ // string|number|time|boolean
1010
+ description: z9.string().optional(),
1011
+ synonyms: z9.array(z9.string()).optional()
1012
+ });
1013
+ var NamedFilterSchema = z9.object({
1014
+ description: z9.string().optional(),
1015
+ sql: z9.string().min(1),
1016
+ synonyms: z9.array(z9.string()).optional()
1017
+ });
1018
+ var CuratedSourceSchema = z9.object({ table: z9.string().optional(), model: z9.string().optional() }).refine((s) => Boolean(s.table) !== Boolean(s.model), {
1019
+ message: "source must specify exactly one of `table` or `model`"
1020
+ });
1021
+ var SemanticDefinitionSchema = z9.object({
1022
+ entity: z9.string().min(1),
1023
+ description: z9.string().optional(),
1024
+ source: CuratedSourceSchema,
1025
+ primary_key: z9.string().optional(),
1026
+ time_dimension: z9.string().optional(),
1027
+ dimensions: z9.array(CuratedDimensionSchema).default([]),
1028
+ filters: z9.record(NamedFilterSchema).optional().default({}),
1029
+ metrics: z9.array(CuratedMetricSchema).min(1)
1030
+ });
1031
+
1032
+ // ../../packages/schema/dist/agent.js
1033
+ import { z as z10 } from "zod";
1034
+ var AgentDefinitionSchema = z10.object({
1035
+ name: z10.string(),
1036
+ title: z10.string().optional(),
1037
+ description: z10.string(),
1038
+ system_prompt: z10.string(),
1039
+ tools: z10.array(z10.string()).default([]),
1040
+ model: z10.string().optional(),
1041
+ models: z10.array(z10.string()).optional()
1042
+ });
1043
+
1044
+ // ../../packages/schema/dist/hunch.js
1045
+ import { z as z11 } from "zod";
1046
+ var HunchStatusSchema = z11.enum(["pending", "confirmed", "rejected"]);
1047
+ var HunchSampleSchema = z11.object({
1048
+ columns: z11.array(z11.object({ name: z11.string() })),
1049
+ rows: z11.array(z11.record(z11.unknown())),
1050
+ ranAt: z11.string()
1051
+ });
1052
+ var NewHunchSchema = z11.object({
1053
+ connection: z11.string(),
1054
+ question: z11.string().min(1),
1055
+ sql: z11.string().min(1),
1056
+ generatedSql: z11.string().min(1),
1057
+ tablesUsed: z11.array(z11.string()).default([]),
1058
+ rationale: z11.string().optional(),
1059
+ confidence: z11.number().min(0).max(1).optional()
1060
+ });
1061
+ var HunchSchema = NewHunchSchema.extend({
1062
+ id: z11.string(),
1063
+ status: HunchStatusSchema,
1064
+ lastRunSample: HunchSampleSchema.optional(),
1065
+ createdAt: z11.string(),
1066
+ updatedAt: z11.string()
1067
+ });
1068
+ var ColumnProfileSchema = z11.object({
1069
+ name: z11.string(),
1070
+ type: z11.string(),
1071
+ nullRate: z11.number().optional(),
1072
+ distinctCount: z11.number().optional(),
1073
+ min: z11.unknown().optional(),
1074
+ max: z11.unknown().optional(),
1075
+ topValues: z11.array(z11.object({ value: z11.unknown(), count: z11.number() })).optional()
1076
+ });
1077
+ var TableProfileSchema = z11.object({
1078
+ table: z11.string(),
1079
+ rowCount: z11.number().optional(),
1080
+ columns: z11.array(ColumnProfileSchema),
1081
+ sampleRows: z11.array(z11.record(z11.unknown()))
1082
+ });
1083
+ var SourceProfileSchema = z11.object({
1084
+ connection: z11.string(),
1085
+ profiledAt: z11.string(),
1086
+ tables: z11.array(TableProfileSchema)
1087
+ });
1088
+
1089
+ // ../../packages/schema/dist/blindspot.js
1090
+ import { z as z12 } from "zod";
1091
+ var BlindspotKindSchema = z12.enum(["context", "opportunity"]);
1092
+ var BlindspotStatusSchema = z12.enum(["open", "answered", "dismissed"]);
1093
+ var SuggestedModelSchema = z12.object({
1094
+ name: z12.string().min(1),
1095
+ description: z12.string(),
1096
+ rationale: z12.string(),
1097
+ columns: z12.array(z12.object({ name: z12.string(), description: z12.string().optional() }))
1098
+ });
1099
+ var NewBlindspotSchema = z12.object({
1100
+ connection: z12.string(),
1101
+ kind: BlindspotKindSchema,
1102
+ title: z12.string().min(1),
1103
+ detail: z12.string().min(1),
1104
+ subject: z12.string().optional(),
1105
+ suggestedModel: SuggestedModelSchema.optional(),
1106
+ confidence: z12.number().min(0).max(1).optional()
1107
+ }).refine((b) => b.kind !== "opportunity" || b.suggestedModel !== void 0, {
1108
+ message: "opportunity blindspots must include a suggestedModel"
1109
+ });
1110
+ var BlindspotSchema = z12.object({
1111
+ id: z12.string(),
1112
+ connection: z12.string(),
1113
+ kind: BlindspotKindSchema,
1114
+ title: z12.string(),
1115
+ detail: z12.string(),
1116
+ subject: z12.string().optional(),
1117
+ suggestedModel: SuggestedModelSchema.optional(),
1118
+ confidence: z12.number().optional(),
1119
+ status: BlindspotStatusSchema,
1120
+ answer: z12.string().optional(),
1121
+ createdAt: z12.string(),
1122
+ updatedAt: z12.string()
1123
+ });
1124
+
1125
+ // ../../packages/schema/dist/knowledge-doc.js
1126
+ import { z as z13 } from "zod";
1127
+ var NewKnowledgeDocSchema = z13.object({
1128
+ connection: z13.string(),
1129
+ title: z13.string().min(1),
1130
+ content: z13.string().min(1),
1131
+ source: z13.enum(["ui", "file"]).default("ui")
1132
+ });
1133
+ var KnowledgeDocSchema = NewKnowledgeDocSchema.extend({
1134
+ id: z13.string(),
1135
+ createdAt: z13.string(),
1136
+ updatedAt: z13.string()
976
1137
  });
977
1138
 
978
1139
  // ../../packages/schema/dist/index.js
@@ -995,6 +1156,8 @@ export {
995
1156
  SemanticConfigSchema,
996
1157
  deepMerge,
997
1158
  resolveProjectConfig,
1159
+ ProviderConfigSchema,
1160
+ AiConfigSchema,
998
1161
  ProjectSchema,
999
1162
  ModelMetadataSchema,
1000
1163
  ModelSchema,
@@ -1002,7 +1165,26 @@ export {
1002
1165
  ScheduleSchema,
1003
1166
  EventSchema,
1004
1167
  EventsFileSchema,
1168
+ CuratedMetricSchema,
1169
+ CuratedDimensionSchema,
1170
+ NamedFilterSchema,
1171
+ CuratedSourceSchema,
1172
+ SemanticDefinitionSchema,
1005
1173
  AgentDefinitionSchema,
1174
+ HunchStatusSchema,
1175
+ HunchSampleSchema,
1176
+ NewHunchSchema,
1177
+ HunchSchema,
1178
+ ColumnProfileSchema,
1179
+ TableProfileSchema,
1180
+ SourceProfileSchema,
1181
+ BlindspotKindSchema,
1182
+ BlindspotStatusSchema,
1183
+ SuggestedModelSchema,
1184
+ NewBlindspotSchema,
1185
+ BlindspotSchema,
1186
+ NewKnowledgeDocSchema,
1187
+ KnowledgeDocSchema,
1006
1188
  VERSION
1007
1189
  };
1008
- //# sourceMappingURL=chunk-RM6MNDVF.js.map
1190
+ //# sourceMappingURL=chunk-ZIY22VO7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../packages/schema/src/connection.ts","../../../packages/schema/src/chart.ts","../../../packages/schema/src/project.ts","../../../packages/schema/src/semantic.ts","../../../packages/schema/src/model.ts","../../../packages/schema/src/dashboard.ts","../../../packages/schema/src/schedule.ts","../../../packages/schema/src/events.ts","../../../packages/schema/src/semantic-curated.ts","../../../packages/schema/src/agent.ts","../../../packages/schema/src/hunch.ts","../../../packages/schema/src/blindspot.ts","../../../packages/schema/src/knowledge-doc.ts","../../../packages/schema/src/index.ts"],"sourcesContent":["import { z } from 'zod';\n\n// Auth configuration for connections\nconst EnvAuthSchema = z.object({\n type: z.literal('env'),\n user_var: z.string(),\n password_var: z.string(),\n});\n\nconst KeyPairAuthSchema = z.object({\n type: z.literal('key_pair'),\n user_var: z.string(),\n private_key_path: z.string(),\n});\n\nconst SecretManagerAuthSchema = z.object({\n type: z.literal('secret_manager'),\n provider: z.enum(['aws_secrets_manager', 'gcp_secret_manager', 'vault']),\n secret_id: z.string(),\n});\n\nconst ExternalBrowserAuthSchema = z.object({\n type: z.literal('externalbrowser'),\n user_var: z.string(),\n cache_token: z.boolean().optional(),\n});\n\nconst ServiceAccountAuthSchema = z.object({\n type: z.literal('service_account'),\n credentials_var: z.string().optional(), // env var NAME holding the SA JSON contents\n key_file: z.string().optional(), // path to a SA .json key file\n});\n\nconst AuthSchema = z.discriminatedUnion('type', [\n EnvAuthSchema,\n KeyPairAuthSchema,\n SecretManagerAuthSchema,\n ExternalBrowserAuthSchema,\n ServiceAccountAuthSchema,\n]);\n\n// Connection pool configuration\nconst PoolConfigSchema = z.object({\n min_connections: z.number().int().positive().optional(),\n max_connections: z.number().int().positive().optional(),\n idle_timeout: z.number().int().positive().optional(),\n});\n\n// Query settings\nconst QueryConfigSchema = z.object({\n timeout: z.number().int().positive().optional(),\n max_rows: z.number().int().positive().optional(),\n});\n\n// DuckDB-specific config\nconst DuckDBConfigSchema = z.object({\n path: z.string(), // file path or :memory:\n});\n\n// Postgres-specific config\nconst PostgresConfigSchema = z.object({\n host: z.string(),\n port: z.number().int().positive().default(5432),\n database: z.string(),\n schema: z.string().optional(),\n ssl: z.boolean().optional(),\n});\n\n// Snowflake-specific config\nconst SnowflakeConfigSchema = z.object({\n account: z.string(),\n warehouse: z.string(),\n database: z.string(),\n schema: z.string().optional(),\n role: z.string().optional(),\n});\n\n// MySQL-specific config\nconst MySQLConfigSchema = z.object({\n host: z.string(),\n port: z.number().int().positive().default(3306),\n database: z.string(),\n ssl: z.boolean().optional(),\n});\n\n// SQLite-specific config\nconst SQLiteConfigSchema = z.object({\n path: z.string(), // file path or :memory:\n});\n\n// BigQuery-specific config\nconst BigQueryConfigSchema = z.object({\n project_id: z.string(),\n dataset: z.string().optional(),\n location: z.string().optional(),\n max_bytes_billed: z.number().optional(),\n});\n\n// Base connection schema\nconst BaseConnectionSchema = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n pool: PoolConfigSchema.optional(),\n query: QueryConfigSchema.optional(),\n});\n\n// Type-specific connection schemas\nconst DuckDBConnectionSchema = BaseConnectionSchema.extend({\n type: z.literal('duckdb'),\n config: DuckDBConfigSchema,\n auth: z.undefined().optional(),\n});\n\nconst PostgresConnectionSchema = BaseConnectionSchema.extend({\n type: z.literal('postgres'),\n config: PostgresConfigSchema,\n auth: AuthSchema.optional(),\n});\n\nconst SnowflakeConnectionSchema = BaseConnectionSchema.extend({\n type: z.literal('snowflake'),\n config: SnowflakeConfigSchema,\n auth: AuthSchema,\n});\n\nconst MySQLConnectionSchema = BaseConnectionSchema.extend({\n type: z.literal('mysql'),\n config: MySQLConfigSchema,\n auth: AuthSchema.optional(),\n});\n\nconst SQLiteConnectionSchema = BaseConnectionSchema.extend({\n type: z.literal('sqlite'),\n config: SQLiteConfigSchema,\n auth: z.undefined().optional(),\n});\n\nconst BigQueryConnectionSchema = BaseConnectionSchema.extend({\n type: z.literal('bigquery'),\n config: BigQueryConfigSchema,\n auth: AuthSchema,\n});\n\n// Union of all connection types\nexport const ConnectionSchema = z.discriminatedUnion('type', [\n DuckDBConnectionSchema,\n PostgresConnectionSchema,\n SnowflakeConnectionSchema,\n MySQLConnectionSchema,\n SQLiteConnectionSchema,\n BigQueryConnectionSchema,\n]);\n\nexport type Connection = z.infer<typeof ConnectionSchema>;\nexport type DuckDBConnection = z.infer<typeof DuckDBConnectionSchema>;\nexport type PostgresConnection = z.infer<typeof PostgresConnectionSchema>;\nexport type SnowflakeConnection = z.infer<typeof SnowflakeConnectionSchema>;\nexport type MySQLConnection = z.infer<typeof MySQLConnectionSchema>;\nexport type SQLiteConnection = z.infer<typeof SQLiteConnectionSchema>;\nexport type BigQueryConnection = z.infer<typeof BigQueryConnectionSchema>;\n","import { z } from 'zod';\n\n// Axis types\nconst AxisTypeSchema = z.enum(['temporal', 'quantitative', 'ordinal', 'nominal']);\n\n// Axis configuration\nconst AxisSchema = z.object({\n field: z.string().min(1),\n type: AxisTypeSchema,\n format: z.string().optional(),\n label: z.string().optional(),\n scale: z.enum(['linear', 'log']).optional(),\n});\n\n// Chart types supported (scatter has its own dedicated schema)\nconst ChartTypeSchema = z.enum([\n 'line',\n 'bar',\n 'area',\n 'pie',\n 'donut',\n 'table',\n 'metric',\n 'map',\n 'heatmap',\n 'funnel',\n 'sankey',\n 'treemap',\n 'waterfall',\n 'gauge',\n]);\n\n// Gradient configuration - boolean shorthand or explicit from/to\nconst GradientSchema = z.union([\n z.boolean(),\n z.object({\n from: z.string(),\n to: z.string(),\n }),\n]);\n\n// Long format series: group by a field in the data (one row per series value)\nconst LongFormatSeriesSchema = z.object({\n field: z.string().min(1),\n colors: z.record(z.string(), z.string()).optional(),\n});\n\n// Series transform: compute derived values client-side\nconst SeriesTransformSchema = z.object({\n type: z.enum(['rolling_average']),\n window: z.number().int().positive(),\n});\n\n// Wide format column: each column becomes a separate series\nconst WideFormatColumnSchema = z.object({\n field: z.string().min(1),\n name: z.string().optional(),\n type: z.enum(['line', 'bar', 'area']).optional(),\n axis: z.enum(['left', 'right']).optional(),\n color: z.string().optional(),\n style: z.enum(['solid', 'dashed', 'dotted']).optional(),\n opacity: z.number().min(0).max(1).optional(),\n gradient: GradientSchema.optional(),\n transform: SeriesTransformSchema.optional(),\n band: z.string().optional(), // Pair with another column to render as shaded range band\n});\n\n// Wide format series: explicit list of columns\nconst WideFormatSeriesSchema = z.object({\n columns: z.array(WideFormatColumnSchema).min(1),\n});\n\n// Series config is either long format (group by field) or wide format (explicit columns)\nconst SeriesConfigSchema = z.union([\n LongFormatSeriesSchema,\n WideFormatSeriesSchema,\n]);\n\n// Color condition for conditional coloring\nconst ColorConditionSchema = z.object({\n when: z.string(),\n color: z.string(),\n});\n\n// Conditional color configuration\nconst ConditionalColorSchema = z.object({\n conditions: z.array(ColorConditionSchema).min(1),\n default: z.string().optional(),\n});\n\n// Color - either a simple string or conditional config\nconst ColorSchema = z.union([\n z.string(),\n ConditionalColorSchema,\n]);\n\n// Legend configuration\nconst LegendSchema = z.object({\n show: z.boolean().optional(),\n position: z.enum(['top', 'bottom', 'left', 'right']).optional(),\n});\n\n// Annotation configuration\nconst LineAnnotationSchema = z.object({\n type: z.literal('line'),\n value: z.number(),\n label: z.string().optional(),\n color: z.string().optional(),\n style: z.enum(['solid', 'dashed', 'dotted']).optional(),\n});\n\nconst BandAnnotationSchema = z.object({\n type: z.literal('band'),\n from: z.number(),\n to: z.number(),\n label: z.string().optional(),\n color: z.string().optional(),\n});\n\nconst XLineAnnotationSchema = z.object({\n type: z.literal('x_line'),\n x: z.string(), // x-axis value (date string or category)\n label: z.string().optional(),\n color: z.string().optional(),\n style: z.enum(['solid', 'dashed', 'dotted']).optional(),\n});\n\nconst AnnotationSchema = z.discriminatedUnion('type', [\n LineAnnotationSchema,\n BandAnnotationSchema,\n XLineAnnotationSchema,\n]);\n\n// Goal zone configuration (tolerance band around target)\nconst GoalZoneSchema = z.object({\n tolerance: z.number().min(0).max(1),\n});\n\n// Goal line style\nconst GoalStyleSchema = z.enum(['solid', 'dashed', 'dotted']);\n\n// Fixed goal — constant horizontal target line\nconst FixedGoalSchema = z.object({\n type: z.literal('fixed'),\n value: z.number(),\n label: z.string().optional(),\n color: z.string().optional(),\n style: GoalStyleSchema.optional(),\n zone: GoalZoneSchema.optional(),\n});\n\n// Cumulative goal — target value to reach by a deadline\nconst CumulativeGoalSchema = z.object({\n type: z.literal('cumulative'),\n value: z.number(),\n by: z.string().min(1),\n from: z.string().optional(),\n label: z.string().optional(),\n color: z.string().optional(),\n style: GoalStyleSchema.optional(),\n zone: GoalZoneSchema.optional(),\n});\n\n// Source for model-driven goals\nconst GoalSourceSchema = z.object({\n model: z.string().min(1),\n value_field: z.string().min(1),\n date_field: z.string().optional(),\n});\n\n// Model-driven goal — target values from a SQL model\nconst ModelGoalSchema = z.object({\n type: z.literal('model'),\n source: GoalSourceSchema,\n label: z.string().optional(),\n color: z.string().optional(),\n style: GoalStyleSchema.optional(),\n zone: GoalZoneSchema.optional(),\n});\n\n// Goal discriminated union (for line/bar/area/combo charts)\nconst GoalSchema = z.discriminatedUnion('type', [\n FixedGoalSchema,\n CumulativeGoalSchema,\n ModelGoalSchema,\n]);\n\n// KPI/Gauge goal — simple target value with optional progress display\nconst KpiGoalSchema = z.object({\n value: z.number(),\n label: z.string().optional(),\n show_progress: z.boolean().optional(),\n color: z.string().optional(),\n});\n\n// Interactivity options\nconst InteractionsSchema = z.object({\n tooltip: z.boolean().default(true),\n zoom: z.boolean().default(false),\n brush: z.boolean().default(false),\n});\n\n// KPI format types\nconst KpiFormatSchema = z.object({\n type: z.enum(['number', 'currency', 'percent']),\n currency: z.string().optional(), // e.g., 'USD', 'EUR'\n decimals: z.number().optional(),\n});\n\n// KPI comparison configuration\nconst KpiComparisonSchema = z.object({\n enabled: z.boolean(),\n field: z.string().min(1).optional(),\n period: z.enum(['previous']).optional(),\n label: z.string().optional(),\n type: z.enum(['percent_change', 'absolute']),\n}).refine(\n (data) => !(data.field && data.period),\n { message: 'Cannot set both field and period — use one or the other' }\n).refine(\n (data) => data.field || data.period,\n { message: 'Must set either field or period for comparison' }\n);\n\n// KPI value configuration\nconst KpiValueSchema = z.object({\n field: z.string().min(1),\n});\n\n// KPI-specific config\nconst KpiConfigSchema = z.object({\n type: z.literal('kpi'),\n value: KpiValueSchema,\n format: KpiFormatSchema,\n comparison: KpiComparisonSchema.optional(),\n unit: z.string().optional(), // e.g., 'min', 'sessions', 'users'\n goal: KpiGoalSchema.optional(),\n});\n\n// Center value for donut charts\nconst CenterValueSchema = z.object({\n field: z.string().optional(), // 'total' for sum, or specific field\n label: z.string().optional(),\n format: z.string().optional(),\n});\n\n// Period comparison overlay\nconst CompareSchema = z.object({\n period: z.string(), // previous_week, previous_month, previous_year, or a preset name\n label: z.string().optional(),\n style: z.enum(['solid', 'dashed', 'dotted']).optional(),\n opacity: z.number().min(0).max(1).optional(),\n color: z.string().optional(),\n});\n\n// Standard chart config (existing)\nconst StandardChartConfigSchema = z.object({\n type: ChartTypeSchema,\n x: AxisSchema,\n y: AxisSchema.optional(),\n series: SeriesConfigSchema.optional(),\n stacking: z.enum(['stacked', 'percent']).optional(),\n orientation: z.enum(['vertical', 'horizontal']).optional(),\n color: ColorSchema.optional(),\n gradient: GradientSchema.optional(),\n legend: LegendSchema.optional(),\n annotations: z.array(AnnotationSchema).optional(),\n compare: z.array(CompareSchema).optional(),\n interactions: InteractionsSchema.optional(),\n centerValue: CenterValueSchema.optional(), // For donut charts\n goals: z.array(GoalSchema).optional(),\n});\n\n// Dual axis config for combo charts (label + format, not data field references)\nconst DualAxisConfigSchema = z.object({\n label: z.string().optional(),\n format: z.string().optional(),\n scale: z.enum(['linear', 'log']).optional(),\n});\n\nconst DualAxesSchema = z.object({\n left: DualAxisConfigSchema.optional(),\n right: DualAxisConfigSchema.optional(),\n});\n\n// Combo chart config - requires dual axes\nconst ComboChartConfigSchema = z.object({\n type: z.literal('combo'),\n x: AxisSchema,\n series: WideFormatSeriesSchema,\n stacking: z.enum(['stacked', 'percent']).optional(),\n axes: DualAxesSchema,\n legend: LegendSchema.optional(),\n interactions: InteractionsSchema.optional(),\n gradient: GradientSchema.optional(),\n goals: z.array(GoalSchema).optional(),\n});\n\n// Scatter chart size encoding\nconst ScatterSizeSchema = z.object({\n field: z.string().min(1),\n min: z.number().optional(),\n max: z.number().optional(),\n label: z.string().optional(),\n});\n\n// Scatter chart grouping\nconst ScatterGroupSchema = z.object({\n field: z.string().min(1),\n});\n\n// Regression line configuration\nconst RegressionSchema = z.object({\n type: z.literal('linear'),\n show_equation: z.boolean().optional(),\n show_r_squared: z.boolean().optional(),\n});\n\n// Scatter/bubble chart config\nconst ScatterChartConfigSchema = z.object({\n type: z.literal('scatter'),\n x: AxisSchema,\n y: AxisSchema,\n size: ScatterSizeSchema.optional(),\n group: ScatterGroupSchema.optional(),\n regression: RegressionSchema.optional(),\n color: ColorSchema.optional(),\n legend: LegendSchema.optional(),\n interactions: InteractionsSchema.optional(),\n});\n\n// Heatmap chart config\nconst HeatmapChartConfigSchema = z.object({\n type: z.literal('heatmap'),\n x: AxisSchema,\n y: AxisSchema,\n value: z.object({\n field: z.string().min(1),\n label: z.string().optional(),\n }),\n color_range: z.object({\n min: z.string().optional(),\n max: z.string().optional(),\n }).optional(),\n show_values: z.boolean().optional(),\n});\n\n// Funnel chart config\nconst FunnelChartConfigSchema = z.object({\n type: z.literal('funnel'),\n stage: z.object({ field: z.string().min(1) }),\n value: z.object({ field: z.string().min(1) }),\n show_conversion: z.boolean().optional(),\n color: ColorSchema.optional(),\n});\n\n// Waterfall chart config\nconst WaterfallChartConfigSchema = z.object({\n type: z.literal('waterfall'),\n category: z.object({ field: z.string().min(1) }),\n value: z.object({ field: z.string().min(1) }),\n total_field: z.string().optional(),\n series: LongFormatSeriesSchema.optional(), // Stacked breakdown within each waterfall step\n colors: z.object({\n increase: z.string().optional(),\n decrease: z.string().optional(),\n total: z.string().optional(),\n }).optional(),\n});\n\n// Sankey chart config\nconst SankeyChartConfigSchema = z.object({\n type: z.literal('sankey'),\n source: z.object({ field: z.string().min(1) }),\n target: z.object({ field: z.string().min(1) }),\n value: z.object({ field: z.string().min(1) }),\n levels: z.array(z.array(z.string())).optional(),\n orient: z.enum(['horizontal', 'vertical']).optional(),\n node_width: z.number().positive().optional(),\n node_gap: z.number().nonnegative().optional(),\n label_position: z.enum(['left', 'right', 'top', 'bottom', 'inside']).optional(),\n});\nexport type SankeyChartConfig = z.infer<typeof SankeyChartConfigSchema>;\n\n// Gauge chart config\nconst GaugeThresholdSchema = z.object({\n value: z.number(),\n color: z.string(),\n});\n\nconst GaugeChartConfigSchema = z.object({\n type: z.literal('gauge'),\n value: z.object({ field: z.string().min(1) }),\n min: z.number().optional(),\n max: z.number().optional(),\n unit: z.string().optional(),\n thresholds: z.array(GaugeThresholdSchema).optional(),\n format: z.string().optional(),\n goal: KpiGoalSchema.optional(),\n});\n\nconst TableColumnSummarySchema = z.enum(['sum', 'avg', 'min', 'max', 'count']);\n\nconst PivotAggregateSchema = z.enum(['sum', 'avg', 'min', 'max', 'count']);\n\nconst PivotValueSchema = z.object({\n field: z.string().min(1),\n aggregate: PivotAggregateSchema.default('sum'),\n format: z.string().optional(),\n heatmap: z.boolean().optional(),\n});\n\nconst PivotHeatmapSchema = z.object({\n color: z.string().optional(),\n scope: z.enum(['column', 'global']).optional(),\n});\n\nconst PivotConfigSchema = z.object({\n rows: z.array(z.string().min(1)).min(1),\n columns: z.string().min(1),\n values: z.array(PivotValueSchema).min(1),\n subtotals: z.boolean().optional(),\n grandTotals: z.boolean().optional(),\n heatmap: PivotHeatmapSchema.optional(),\n});\n\nconst TableChartConfigSchema = z.object({\n type: z.literal('table'),\n columns: z.array(z.object({\n field: z.string().min(1),\n label: z.string().optional(),\n format: z.string().optional(),\n sticky: z.boolean().optional(),\n summary: TableColumnSummarySchema.optional(),\n overflow: z.enum(['ellipsis', 'wrap', 'hidden']).optional(),\n font: z.enum(['mono']).optional(),\n })).optional(),\n summary: z.object({\n label: z.string().optional(),\n }).optional(),\n sort: z.object({\n field: z.string().min(1),\n direction: z.enum(['asc', 'desc']).optional(),\n }).optional(),\n pagination: z.object({\n enabled: z.boolean().optional(),\n page_size: z.number().int().positive().optional(),\n mode: z.enum(['paginated', 'infinite_scroll']).optional(),\n server_side: z.boolean().optional(),\n }).optional(),\n max_rows: z.number().int().positive().optional(),\n export: z.object({\n enabled: z.boolean().optional(),\n max_rows: z.number().int().positive().optional(),\n }).optional(),\n pivot: PivotConfigSchema.optional(),\n});\n\n// Chart visualization config - standard, KPI, combo, scatter, heatmap, funnel, waterfall, gauge, or table\nconst ChartConfigSchema = z.union([\n ScatterChartConfigSchema,\n ComboChartConfigSchema,\n HeatmapChartConfigSchema,\n FunnelChartConfigSchema,\n WaterfallChartConfigSchema,\n GaugeChartConfigSchema,\n SankeyChartConfigSchema,\n TableChartConfigSchema,\n StandardChartConfigSchema,\n KpiConfigSchema,\n]);\n\n// Parameter types\nconst ParameterTypeSchema = z.enum([\n 'date_range',\n 'select',\n 'multi_select',\n 'dynamic_select',\n 'text',\n 'number',\n 'boolean',\n]);\n\n// Parameter option\nconst ParameterOptionSchema = z.union([\n z.string(),\n z.object({\n value: z.string(),\n label: z.string(),\n }),\n]);\n\n// Parameter source (for dynamic options)\nconst ParameterSourceSchema = z.object({\n model: z.string(),\n value_field: z.string(),\n label_field: z.string(),\n});\n\n// Parameter definition\nconst ParameterSchema = z.object({\n name: z.string().min(1),\n type: ParameterTypeSchema,\n label: z.string().optional(),\n description: z.string().optional(),\n default: z.union([z.string(), z.number(), z.array(z.string())]).optional(),\n options: z.array(ParameterOptionSchema).optional(),\n source: ParameterSourceSchema.optional(),\n});\n\n// Data source - either model reference or inline SQL\nconst SourceSchema = z.object({\n model: z.string().optional(),\n sql: z.string().optional(),\n}).refine(\n (data) => data.model !== undefined || data.sql !== undefined,\n { message: 'Source must specify either model or sql' }\n).refine(\n (data) => !(data.model !== undefined && data.sql !== undefined),\n { message: 'Source cannot specify both model and sql' }\n);\n\n// Refresh/cache configuration\nconst RefreshSchema = z.object({\n schedule: z.string().optional(), // cron expression\n timezone: z.string().optional(),\n cache_ttl: z.string().optional(), // e.g., \"1h\", \"30m\"\n});\n\n// Drill-down column config for data table display\nconst DrillDownColumnSchema = z.object({\n field: z.string().min(1),\n label: z.string().optional(),\n format: z.string().optional(),\n});\n\n// Drill-down configuration\nconst DrillDownConfigSchema = z.object({\n chart: z.string().optional(), // target chart name (source side)\n model: z.string().optional(), // model name for row-level detail data\n field: z.string().optional(), // field to pass as filter, defaults to x-axis field (backward compat)\n fields: z.union([z.string(), z.array(z.string())]).optional(), // dimension field(s) for filtering\n columns: z.array(DrillDownColumnSchema).optional(), // data table columns (target side)\n}).refine(data => data.chart || data.model || data.columns, {\n message: \"drillDown requires 'chart', 'model', or 'columns'\",\n});\n\n// Main chart schema\nexport const ChartSchema = z.object({\n // Identity\n name: z.string().min(1),\n title: z.string().min(1),\n description: z.string().optional(),\n\n // Metadata\n owner: z.string().optional(),\n tags: z.array(z.string()).optional(),\n created: z.string().optional(),\n updated: z.string().optional(),\n\n // Data\n source: SourceSchema,\n parameters: z.array(ParameterSchema).optional(),\n\n // Visualization\n chart: ChartConfigSchema,\n\n // Caching\n refresh: RefreshSchema.optional(),\n\n // Drill-down navigation\n drillDown: DrillDownConfigSchema.optional(),\n});\n\nexport type Chart = z.infer<typeof ChartSchema>;\nexport type ChartConfig = z.infer<typeof ChartConfigSchema>;\nexport type ChartType = z.infer<typeof ChartTypeSchema>;\nexport type Parameter = z.infer<typeof ParameterSchema>;\nexport type Axis = z.infer<typeof AxisSchema>;\nexport type SeriesConfig = z.infer<typeof SeriesConfigSchema>;\nexport type LongFormatSeries = z.infer<typeof LongFormatSeriesSchema>;\nexport type WideFormatSeries = z.infer<typeof WideFormatSeriesSchema>;\nexport type WideFormatColumn = z.infer<typeof WideFormatColumnSchema>;\nexport type ColorConfig = z.infer<typeof ColorSchema>;\nexport type ConditionalColor = z.infer<typeof ConditionalColorSchema>;\nexport type ColorCondition = z.infer<typeof ColorConditionSchema>;\nexport type GradientConfig = z.infer<typeof GradientSchema>;\nexport type LegendConfig = z.infer<typeof LegendSchema>;\nexport type ComboChartConfig = z.infer<typeof ComboChartConfigSchema>;\nexport type DualAxes = z.infer<typeof DualAxesSchema>;\nexport type ScatterChartConfig = z.infer<typeof ScatterChartConfigSchema>;\nexport type ScatterSize = z.infer<typeof ScatterSizeSchema>;\nexport type ScatterGroup = z.infer<typeof ScatterGroupSchema>;\nexport type RegressionConfig = z.infer<typeof RegressionSchema>;\nexport type DrillDownConfig = z.infer<typeof DrillDownConfigSchema>;\nexport type DrillDownColumn = z.infer<typeof DrillDownColumnSchema>;\nexport type HeatmapChartConfig = z.infer<typeof HeatmapChartConfigSchema>;\nexport type FunnelChartConfig = z.infer<typeof FunnelChartConfigSchema>;\nexport type WaterfallChartConfig = z.infer<typeof WaterfallChartConfigSchema>;\nexport type GaugeChartConfig = z.infer<typeof GaugeChartConfigSchema>;\nexport type TableChartConfig = z.infer<typeof TableChartConfigSchema>;\nexport type PivotConfig = z.infer<typeof PivotConfigSchema>;\nexport type PivotValueConfig = z.infer<typeof PivotValueSchema>;\nexport type PivotHeatmapConfig = z.infer<typeof PivotHeatmapSchema>;\nexport type GoalConfig = z.infer<typeof GoalSchema>;\nexport type FixedGoal = z.infer<typeof FixedGoalSchema>;\nexport type CumulativeGoal = z.infer<typeof CumulativeGoalSchema>;\nexport type ModelGoal = z.infer<typeof ModelGoalSchema>;\nexport type KpiGoal = z.infer<typeof KpiGoalSchema>;\nexport type GoalZone = z.infer<typeof GoalZoneSchema>;\n\nexport { ParameterSchema };\n","import { z } from 'zod';\nimport { SemanticConfigSchema } from './semantic.js';\n\n// Default settings\nconst DefaultsSchema = z.object({\n connection: z.string().optional(),\n theme: z.string().optional(),\n timezone: z.string().optional(),\n cache_ttl: z.string().optional(),\n base_url: z.string().url().optional(),\n week_start: z.enum(['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']).optional(),\n table: z.object({\n max_display_rows: z.number().int().positive().optional(),\n max_export_rows: z.number().int().positive().optional(),\n }).optional(),\n});\n\n// Git integration settings\nconst GitSchema = z.object({\n provider: z.enum(['github', 'gitlab', 'bitbucket']).optional(),\n repo: z.string().optional(),\n branch: z.string().optional(),\n preview_branches: z.boolean().optional(),\n});\n\n// SSO provider configuration\nconst SSOProviderSchema = z\n .object({\n client_id: z.string(),\n // Provide the secret directly, or name an env var that holds it (client_secret_var)\n // so the secret never lives in git.\n client_secret: z.string().optional(),\n client_secret_var: z.string().optional(),\n tenant: z.string().optional(),\n issuer: z.string().optional(),\n display_name: z.string().optional(),\n // Invite list: if non-empty, only these emails may sign in via this provider.\n // Anyone not listed is rejected instead of auto-provisioned.\n allowed_emails: z.array(z.string()).optional(),\n // Emails provisioned with the admin role (implicitly allowed even if not in allowed_emails).\n admin_emails: z.array(z.string()).optional(),\n })\n .refine((c) => !!c.client_secret || !!c.client_secret_var, {\n message: 'SSO provider requires either client_secret or client_secret_var',\n });\n\n// Authentication settings (built-in local auth)\nconst AuthSchema = z.object({\n enabled: z.boolean(),\n db_path: z.string().optional(),\n session_ttl: z.string().optional(),\n providers: z.object({\n google: SSOProviderSchema.optional(),\n microsoft: SSOProviderSchema.optional(),\n oidc: SSOProviderSchema.optional(),\n }).optional(),\n});\n\n// Feature flags\nconst FeaturesSchema = z.object({\n enable_sql_editor: z.boolean().optional(),\n enable_csv_export: z.boolean().optional(),\n enable_scheduling: z.boolean().optional(),\n chat: z.boolean().optional(),\n});\n\n// Sidebar link for external navigation\nconst SidebarLinkSchema = z.object({\n label: z.string(),\n url: z.string(),\n icon: z.string().optional(),\n});\n\n// Sidebar configuration\nconst SidebarConfigSchema = z.object({\n show: z.boolean().optional(),\n collapsed: z.boolean().optional(),\n links: z.array(SidebarLinkSchema).optional(),\n sections: z.object({\n dashboards: z.boolean().optional(),\n charts: z.boolean().optional(),\n }).optional(),\n});\n\n// Color configuration\nconst ColorsSchema = z.object({\n primary: z.string().optional(),\n background: z.string().optional(),\n surface: z.string().optional(),\n sidebar: z.string().optional(),\n text: z.string().optional(),\n});\n\n// Font configuration\nconst FontsSchema = z.object({\n heading: z.string().optional(),\n body: z.string().optional(),\n mono: z.string().optional(),\n size: z.enum(['compact', 'default', 'comfortable']).optional(),\n});\n\n// Logo can be a string path or light/dark object\nconst LogoSchema = z.union([\n z.string(),\n z.object({\n light: z.string(),\n dark: z.string(),\n }),\n]);\n\n// Theme configuration\nconst ThemeSchema = z.object({\n mode: z.enum(['light', 'dark', 'auto']).optional(),\n base: z.enum(['modern', 'executive', 'minimal']).optional(),\n logo: LogoSchema.optional(),\n favicon: z.string().optional(),\n title: z.string().optional(),\n colors: ColorsSchema.optional(),\n palette: z.array(z.string()).optional(),\n gradient: z.boolean().default(false),\n opacity: z.number().min(0).max(1).default(1.0),\n fonts: FontsSchema.optional(),\n sidebar: SidebarConfigSchema.optional(),\n customCss: z.string().optional(),\n});\n\n// Environment-specific overrides — same shape as ProjectSchema minus identity fields\nconst EnvironmentOverrideSchema = z.object({\n defaults: DefaultsSchema.optional(),\n git: GitSchema.optional(),\n auth: AuthSchema.optional(),\n features: FeaturesSchema.optional(),\n theme: ThemeSchema.optional(),\n semantic: SemanticConfigSchema.optional(),\n}).passthrough();\n\n/**\n * Deep-merge two plain objects. Objects merge recursively;\n * arrays and scalars in override replace the base value entirely.\n */\nexport function deepMerge<T extends Record<string, unknown>>(\n base: T,\n override: Record<string, unknown> | undefined,\n): T {\n if (!override) return { ...base };\n\n const result = { ...base } as Record<string, unknown>;\n for (const [key, value] of Object.entries(override)) {\n if (\n value !== null &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n typeof result[key] === 'object' &&\n result[key] !== null &&\n !Array.isArray(result[key])\n ) {\n result[key] = deepMerge(\n result[key] as Record<string, unknown>,\n value as Record<string, unknown>,\n );\n } else {\n result[key] = value;\n }\n }\n return result as T;\n}\n\n/**\n * Resolve a raw yamchart.yaml object for a given environment.\n * Extracts and merges the matching environments block, then strips\n * the environments key. Does NOT validate — caller runs Zod after\n * optionally merging yamchart.local.yaml on top.\n */\nexport function resolveProjectConfig(\n raw: Record<string, unknown>,\n env?: string,\n): Record<string, unknown> {\n const { environments, ...base } = raw;\n const envBlocks = environments as Record<string, Record<string, unknown>> | undefined;\n const envOverride = env ? envBlocks?.[env] : undefined;\n return deepMerge(base as Record<string, unknown>, envOverride);\n}\n\n// Catalog filter configuration\nconst CatalogIncludeSchema = z.object({\n schemas: z.array(z.string()).optional(),\n tags: z.array(z.string()).optional(),\n});\n\nconst CatalogConfigSchema = z.object({\n include: CatalogIncludeSchema.optional(),\n});\n\nexport type CatalogConfig = z.infer<typeof CatalogConfigSchema>;\n\n// Knowledge store configuration (learned Hunches / source profiles, Postgres-backed)\nconst KnowledgeConfigSchema = z.object({\n database_url_var: z.string().default('KNOWLEDGE_DATABASE_URL'),\n});\n\nexport type KnowledgeConfig = z.infer<typeof KnowledgeConfigSchema>;\n\n// AI provider configuration\nexport const ProviderConfigSchema = z.object({\n provider: z.enum(['anthropic', 'openai', 'gemini', 'ollama', 'ollama_cloud', 'openai_compatible']),\n model: z.string().optional(),\n base_url: z.string().optional(),\n api_key_var: z.string().optional(),\n});\n\nexport const AiConfigSchema = z.object({\n default: z.string().optional(),\n providers: z.record(ProviderConfigSchema).optional(),\n tasks: z.record(z.string()).optional(),\n embedding: ProviderConfigSchema.optional(),\n}).refine(\n (c) => !c.default || !c.providers || c.default in c.providers,\n { message: 'ai.default must name a provider in ai.providers' },\n).refine(\n (c) => !c.tasks || !c.providers || Object.values(c.tasks).every((n) => c.providers![n] !== undefined),\n { message: 'every ai.tasks value must name a provider in ai.providers' },\n);\n\nexport type ProviderConfig = z.infer<typeof ProviderConfigSchema>;\nexport type AiConfig = z.infer<typeof AiConfigSchema>;\n\n// Main project schema\nexport const ProjectSchema = z.object({\n version: z.string().min(1),\n name: z.string().min(1),\n description: z.string().optional(),\n\n defaults: DefaultsSchema.optional(),\n\n environments: z.record(z.string(), EnvironmentOverrideSchema).optional(),\n\n git: GitSchema.optional(),\n auth: AuthSchema.optional(),\n features: FeaturesSchema.optional(),\n theme: ThemeSchema.optional(),\n semantic: SemanticConfigSchema,\n catalog: CatalogConfigSchema.optional(),\n knowledge: KnowledgeConfigSchema.optional(),\n ai: AiConfigSchema.optional(),\n});\n\nexport type Project = z.infer<typeof ProjectSchema>;\nexport type Auth = z.infer<typeof AuthSchema>;\nexport type Defaults = z.infer<typeof DefaultsSchema>;\nexport type EnvironmentOverride = z.infer<typeof EnvironmentOverrideSchema>;\nexport type Theme = z.infer<typeof ThemeSchema>;\nexport type SidebarConfig = z.infer<typeof SidebarConfigSchema>;\nexport type FontsConfig = z.infer<typeof FontsSchema>;\nexport type ColorsConfig = z.infer<typeof ColorsSchema>;\n","import { z } from 'zod';\n\n// --- Semantic Model ---\n\nexport const MeasureTypeSchema = z.enum(['sum', 'count', 'avg', 'min', 'max', 'count_distinct']);\n\nexport const DimensionTypeSchema = z.enum(['string', 'number', 'time', 'boolean']);\n\nexport const MeasureSchema = z.object({\n name: z.string(),\n type: MeasureTypeSchema,\n description: z.string().optional(),\n format: z.string().optional(),\n});\n\nexport const DimensionSchema = z.object({\n name: z.string(),\n type: DimensionTypeSchema,\n description: z.string().optional(),\n});\n\nexport const SemanticEntitySchema = z.object({\n name: z.string(),\n description: z.string().optional(),\n source: z.enum(['catalog', 'model']),\n source_table: z.string(),\n measures: z.array(MeasureSchema),\n dimensions: z.array(DimensionSchema),\n parameters: z.array(z.object({\n name: z.string(),\n type: z.string(),\n default: z.union([z.string(), z.number()]).optional(),\n options: z.array(z.string()).optional(),\n })).optional(),\n});\n\nexport const RelationshipSchema = z.object({\n from: z.object({ entity: z.string(), field: z.string() }),\n to: z.object({ entity: z.string(), field: z.string() }),\n type: z.enum(['many_to_one', 'one_to_many', 'one_to_one']),\n});\n\nexport const SemanticModelSchema = z.object({\n entities: z.array(SemanticEntitySchema),\n relationships: z.array(RelationshipSchema),\n generated_at: z.string(),\n});\n\n// --- Structured Query ---\n\nexport const SemanticFilterOperatorSchema = z.enum([\n 'equals', 'not_equals', 'contains', 'gt', 'gte', 'lt', 'lte', 'in', 'not_in',\n]);\n\nexport const SemanticFilterSchema = z.object({\n dimension: z.string(),\n operator: SemanticFilterOperatorSchema,\n value: z.union([z.string(), z.number(), z.boolean(), z.array(z.union([z.string(), z.number()]))]),\n});\n\nexport const SemanticQuerySchema = z.object({\n model: z.string(),\n measures: z.array(z.string()).min(1),\n dimensions: z.array(z.string()).optional().default([]),\n parameters: z.record(z.union([z.string(), z.number()])).optional(),\n filters: z.array(SemanticFilterSchema).optional().default([]),\n order_by: z.object({\n field: z.string(),\n direction: z.enum(['asc', 'desc']).default('asc'),\n }).optional(),\n limit: z.number().int().positive().max(10000).optional().default(1000),\n});\n\n// --- Semantic Config (for yamchart.yaml) ---\n\nexport const SemanticConfigSchema = z.object({\n include: z.object({\n paths: z.array(z.string()).default(['gold/', 'marts/', 'core/']),\n prefixes: z.array(z.string()).default(['dim_', 'fct_', 'fact_']),\n }).optional().default({\n paths: ['gold/', 'marts/', 'core/'],\n prefixes: ['dim_', 'fct_', 'fact_'],\n }),\n}).optional();\n\n// --- Inferred types ---\n\nexport type Measure = z.infer<typeof MeasureSchema>;\nexport type MeasureType = z.infer<typeof MeasureTypeSchema>;\nexport type Dimension = z.infer<typeof DimensionSchema>;\nexport type DimensionType = z.infer<typeof DimensionTypeSchema>;\nexport type SemanticEntity = z.infer<typeof SemanticEntitySchema>;\nexport type Relationship = z.infer<typeof RelationshipSchema>;\nexport type SemanticModel = z.infer<typeof SemanticModelSchema>;\nexport type SemanticFilter = z.infer<typeof SemanticFilterSchema>;\nexport type SemanticQuery = z.infer<typeof SemanticQuerySchema>;\nexport type SemanticConfig = z.infer<typeof SemanticConfigSchema>;\n","import { z } from 'zod';\n\n// Parameter type\nconst ParamTypeSchema = z.enum(['string', 'number', 'date', 'boolean', 'string[]', 'number[]']);\n\n// Model parameter\nconst ModelParamSchema = z.object({\n name: z.string().min(1),\n type: ParamTypeSchema,\n default: z.string().optional(),\n options: z.array(z.string()).optional(), // For enum-like params\n description: z.string().optional(),\n});\n\n// Return column definition\nconst ReturnColumnSchema = z.object({\n name: z.string().min(1),\n type: z.string(),\n description: z.string().optional(),\n});\n\n// Model metadata (extracted from SQL comments)\nexport const ModelMetadataSchema = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n owner: z.string().optional(),\n tags: z.array(z.string()).optional(),\n\n params: z.array(ModelParamSchema).optional(),\n returns: z.array(ReturnColumnSchema).optional(),\n tests: z.array(z.string()).optional(), // SQL assertions\n});\n\n// Full model (metadata + SQL)\nexport const ModelSchema = z.object({\n metadata: ModelMetadataSchema,\n sql: z.string().min(1),\n filePath: z.string().optional(),\n});\n\nexport type ModelMetadata = z.infer<typeof ModelMetadataSchema>;\nexport type ModelParam = z.infer<typeof ModelParamSchema>;\nexport type ReturnColumn = z.infer<typeof ReturnColumnSchema>;\nexport type Model = z.infer<typeof ModelSchema>;\n","import { z } from 'zod';\nimport { ParameterSchema } from './chart.js';\n\n// Widget types\nconst ChartWidgetSchema = z.object({\n type: z.literal('chart'),\n ref: z.string().min(1),\n cols: z.number().min(1).max(12),\n height: z.number().min(38).optional(),\n x: z.number().min(0).max(11).optional(),\n y: z.number().min(0).optional(),\n});\n\nconst TextWidgetSchema = z.object({\n type: z.literal('text'),\n content: z.string(),\n cols: z.number().min(1).max(12),\n height: z.number().min(38).optional(),\n x: z.number().min(0).max(11).optional(),\n y: z.number().min(0).optional(),\n});\n\nconst WidgetSchema = z.discriminatedUnion('type', [\n ChartWidgetSchema,\n TextWidgetSchema,\n]);\n\n// Row configuration\nconst RowSchema = z.object({\n height: z.number().min(38),\n widgets: z.array(WidgetSchema).min(1),\n});\n\n// Layout configuration\nconst LayoutSchema = z.object({\n gap: z.number().min(0).default(16),\n rows: z.array(RowSchema).min(1),\n});\n\n// Tab configuration\nconst TabSchema = z.object({\n name: z.string().min(1),\n label: z.string().min(1),\n filters: z.array(ParameterSchema).optional(),\n layout: LayoutSchema,\n});\n\n// Main dashboard schema\nexport const DashboardSchema = z.object({\n // Identity\n name: z.string().min(1),\n title: z.string().min(1),\n description: z.string().optional(),\n\n // Filters inherited by all widgets (shared across tabs)\n filters: z.array(ParameterSchema).optional(),\n\n // Layout definition (mutually exclusive with tabs)\n layout: LayoutSchema.optional(),\n\n // Tabbed layout\n tabs: z.array(TabSchema).min(1).optional(),\n}).superRefine((data, ctx) => {\n if (data.layout && data.tabs) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'Dashboard must have either \"layout\" or \"tabs\", not both',\n path: ['tabs'],\n });\n }\n if (!data.layout && !data.tabs) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'Dashboard must have either \"layout\" or \"tabs\"',\n path: [],\n });\n }\n});\n\nexport type Dashboard = z.infer<typeof DashboardSchema>;\nexport type DashboardTab = z.infer<typeof TabSchema>;\nexport type DashboardLayout = z.infer<typeof LayoutSchema>;\nexport type DashboardRow = z.infer<typeof RowSchema>;\nexport type DashboardWidget = z.infer<typeof WidgetSchema>;\nexport type ChartWidget = z.infer<typeof ChartWidgetSchema>;\nexport type TextWidget = z.infer<typeof TextWidgetSchema>;\n","import { z } from 'zod';\n\nconst SlackChannelSchema = z.object({\n webhook_url: z.string().min(1),\n channel: z.string().optional(),\n});\n\nconst ChannelSchema = z.object({\n slack: SlackChannelSchema,\n});\n\nconst ConditionOperatorSchema = z.enum(['lt', 'gt', 'lte', 'gte', 'eq']);\n\nconst ConditionSchema = z.object({\n field: z.string().min(1),\n operator: ConditionOperatorSchema,\n value: z.number(),\n});\n\nconst ReportScheduleSchema = z.object({\n name: z.string().min(1),\n type: z.literal('report'),\n schedule: z.string().min(1),\n timezone: z.string().optional(),\n channel: ChannelSchema,\n charts: z.array(z.string().min(1)).min(1),\n params: z.record(z.unknown()).optional(),\n message: z.string().optional(),\n notify_on_error: z.boolean().optional(),\n});\n\nconst AlertScheduleSchema = z.object({\n name: z.string().min(1),\n type: z.literal('alert'),\n schedule: z.string().min(1),\n timezone: z.string().optional(),\n channel: ChannelSchema,\n chart: z.string().min(1),\n params: z.record(z.unknown()).optional(),\n condition: ConditionSchema,\n cooldown: z.string().optional(),\n message: z.string().optional(),\n notify_on_error: z.boolean().optional(),\n});\n\nexport const ScheduleSchema = z.discriminatedUnion('type', [\n ReportScheduleSchema,\n AlertScheduleSchema,\n]);\n\nexport type Schedule = z.infer<typeof ScheduleSchema>;\nexport type ReportSchedule = z.infer<typeof ReportScheduleSchema>;\nexport type AlertSchedule = z.infer<typeof AlertScheduleSchema>;\nexport type Condition = z.infer<typeof ConditionSchema>;\nexport type ConditionOperator = z.infer<typeof ConditionOperatorSchema>;\n","import { z } from 'zod';\n\nexport const EventSchema = z.object({\n date: z.string(),\n endDate: z.string().optional(),\n label: z.string(),\n description: z.string().optional(),\n color: z.string().optional(),\n charts: z.array(z.string()).optional(),\n});\n\nexport const EventsFileSchema = z.object({\n events: z.array(EventSchema).default([]),\n});\n\nexport type ChartEvent = z.infer<typeof EventSchema>;\nexport type EventsFile = z.infer<typeof EventsFileSchema>;\n","// packages/schema/src/semantic-curated.ts\nimport { z } from 'zod';\nimport { MeasureTypeSchema, DimensionTypeSchema } from './semantic.js';\n\nexport const CuratedMetricSchema = z\n .object({\n name: z.string().min(1),\n label: z.string().optional(),\n description: z.string().optional(),\n agg: MeasureTypeSchema, // sum|count|avg|min|max|count_distinct\n field: z.string().optional(), // column to aggregate\n sql: z.string().optional(), // raw aggregate expression (derived metric)\n filter: z.string().optional(), // references a named filter on the entity\n synonyms: z.array(z.string()).optional(),\n format: z.string().optional(),\n default_time_grain: z.enum(['day', 'week', 'month', 'quarter', 'year']).optional(),\n })\n .refine((m) => Boolean(m.field) !== Boolean(m.sql), {\n message: 'metric must specify exactly one of `field` or `sql`',\n })\n .refine((m) => !(m.sql && m.filter), {\n message: 'a metric with raw `sql` cannot also set `filter` (embed the condition in the sql expression instead)',\n });\n\nexport const CuratedDimensionSchema = z.object({\n name: z.string().min(1),\n type: DimensionTypeSchema, // string|number|time|boolean\n description: z.string().optional(),\n synonyms: z.array(z.string()).optional(),\n});\n\nexport const NamedFilterSchema = z.object({\n description: z.string().optional(),\n sql: z.string().min(1),\n synonyms: z.array(z.string()).optional(),\n});\n\nexport const CuratedSourceSchema = z\n .object({ table: z.string().optional(), model: z.string().optional() })\n .refine((s) => Boolean(s.table) !== Boolean(s.model), {\n message: 'source must specify exactly one of `table` or `model`',\n });\n\nexport const SemanticDefinitionSchema = z.object({\n entity: z.string().min(1),\n description: z.string().optional(),\n source: CuratedSourceSchema,\n primary_key: z.string().optional(),\n time_dimension: z.string().optional(),\n dimensions: z.array(CuratedDimensionSchema).default([]),\n filters: z.record(NamedFilterSchema).optional().default({}),\n metrics: z.array(CuratedMetricSchema).min(1),\n});\n\nexport type CuratedMetric = z.infer<typeof CuratedMetricSchema>;\nexport type CuratedDimension = z.infer<typeof CuratedDimensionSchema>;\nexport type NamedFilter = z.infer<typeof NamedFilterSchema>;\nexport type SemanticDefinition = z.infer<typeof SemanticDefinitionSchema>;\n","import { z } from 'zod';\n\n/**\n * Zod schema for validating agent YAML files (agents/*.yaml).\n * system_prompt is treated as a plain string — Jinja rendering happens at load time in packages/chat.\n */\nexport const AgentDefinitionSchema = z.object({\n name: z.string(),\n title: z.string().optional(),\n description: z.string(),\n system_prompt: z.string(),\n tools: z.array(z.string()).default([]),\n model: z.string().optional(),\n models: z.array(z.string()).optional(),\n});\n\nexport type AgentDefinition = z.infer<typeof AgentDefinitionSchema>;\n","// packages/schema/src/hunch.ts\nimport { z } from 'zod';\n\nexport const HunchStatusSchema = z.enum(['pending', 'confirmed', 'rejected']);\n\nexport const HunchSampleSchema = z.object({\n columns: z.array(z.object({ name: z.string() })),\n rows: z.array(z.record(z.unknown())),\n ranAt: z.string(),\n});\n\nexport const NewHunchSchema = z.object({\n connection: z.string(),\n question: z.string().min(1),\n sql: z.string().min(1),\n generatedSql: z.string().min(1),\n tablesUsed: z.array(z.string()).default([]),\n rationale: z.string().optional(),\n confidence: z.number().min(0).max(1).optional(),\n});\n\nexport const HunchSchema = NewHunchSchema.extend({\n id: z.string(),\n status: HunchStatusSchema,\n lastRunSample: HunchSampleSchema.optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport const ColumnProfileSchema = z.object({\n name: z.string(),\n type: z.string(),\n nullRate: z.number().optional(),\n distinctCount: z.number().optional(),\n min: z.unknown().optional(),\n max: z.unknown().optional(),\n topValues: z.array(z.object({ value: z.unknown(), count: z.number() })).optional(),\n});\n\nexport const TableProfileSchema = z.object({\n table: z.string(),\n rowCount: z.number().optional(),\n columns: z.array(ColumnProfileSchema),\n sampleRows: z.array(z.record(z.unknown())),\n});\n\nexport const SourceProfileSchema = z.object({\n connection: z.string(),\n profiledAt: z.string(),\n tables: z.array(TableProfileSchema),\n});\n\nexport type HunchStatus = z.infer<typeof HunchStatusSchema>;\nexport type NewHunch = z.infer<typeof NewHunchSchema>;\nexport type Hunch = z.infer<typeof HunchSchema>;\nexport type ColumnProfile = z.infer<typeof ColumnProfileSchema>;\nexport type TableProfile = z.infer<typeof TableProfileSchema>;\nexport type SourceProfile = z.infer<typeof SourceProfileSchema>;\n","// packages/schema/src/blindspot.ts\nimport { z } from 'zod';\n\nexport const BlindspotKindSchema = z.enum(['context', 'opportunity']);\nexport const BlindspotStatusSchema = z.enum(['open', 'answered', 'dismissed']);\n\nexport const SuggestedModelSchema = z.object({\n name: z.string().min(1),\n description: z.string(),\n rationale: z.string(),\n columns: z.array(z.object({ name: z.string(), description: z.string().optional() })),\n});\n\nexport const NewBlindspotSchema = z.object({\n connection: z.string(),\n kind: BlindspotKindSchema,\n title: z.string().min(1),\n detail: z.string().min(1),\n subject: z.string().optional(),\n suggestedModel: SuggestedModelSchema.optional(),\n confidence: z.number().min(0).max(1).optional(),\n}).refine((b) => b.kind !== 'opportunity' || b.suggestedModel !== undefined, {\n message: 'opportunity blindspots must include a suggestedModel',\n});\n\nexport const BlindspotSchema = z.object({\n id: z.string(),\n connection: z.string(),\n kind: BlindspotKindSchema,\n title: z.string(),\n detail: z.string(),\n subject: z.string().optional(),\n suggestedModel: SuggestedModelSchema.optional(),\n confidence: z.number().optional(),\n status: BlindspotStatusSchema,\n answer: z.string().optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport type BlindspotKind = z.infer<typeof BlindspotKindSchema>;\nexport type BlindspotStatus = z.infer<typeof BlindspotStatusSchema>;\nexport type SuggestedModel = z.infer<typeof SuggestedModelSchema>;\nexport type NewBlindspot = z.infer<typeof NewBlindspotSchema>;\nexport type Blindspot = z.infer<typeof BlindspotSchema>;\n","import { z } from 'zod';\nexport const NewKnowledgeDocSchema = z.object({\n connection: z.string(),\n title: z.string().min(1),\n content: z.string().min(1),\n source: z.enum(['ui', 'file']).default('ui'),\n});\nexport const KnowledgeDocSchema = NewKnowledgeDocSchema.extend({\n id: z.string(), createdAt: z.string(), updatedAt: z.string(),\n});\nexport type NewKnowledgeDoc = z.infer<typeof NewKnowledgeDocSchema>;\nexport type KnowledgeDoc = z.infer<typeof KnowledgeDocSchema>;\n","// Yamchart Schema - Zod schemas and TypeScript types\nexport const VERSION = '0.1.0';\n\nexport * from './connection.js';\nexport * from './chart.js';\nexport * from './project.js';\nexport * from './model.js';\nexport * from './dashboard.js';\nexport * from './schedule.js';\nexport * from './events.js';\nexport * from './semantic.js';\nexport * from './semantic-curated.js';\nexport { AgentDefinitionSchema, type AgentDefinition } from './agent.js';\nexport * from './hunch.js';\nexport * from './blindspot.js';\nexport * from './knowledge-doc.js';\n"],"mappings":"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","names":["z","z","z","z","AuthSchema","z","z","z","z","z","z","z","z","z","z","z"]}
@@ -1,3 +1,4 @@
1
+ import { createRequire as __yamchartCreateRequire } from 'module'; if (!globalThis.require) globalThis.require = __yamchartCreateRequire(import.meta.url);
1
2
  // ../../packages/chat/dist/agent.js
2
3
  import Anthropic from "@anthropic-ai/sdk";
3
4