react-semaphor 0.1.334 → 0.1.335

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 (59) hide show
  1. package/dist/analytics-protocol/index.cjs +1 -1
  2. package/dist/analytics-protocol/index.js +68 -232
  3. package/dist/brand-studio/index.cjs +1 -1
  4. package/dist/brand-studio/index.js +3 -3
  5. package/dist/briefings/index.cjs +1 -1
  6. package/dist/briefings/index.js +435 -391
  7. package/dist/chunks/{braces-DlW7C5BH.js → braces-BLa_lORs.js} +1 -1
  8. package/dist/chunks/{braces-DYx37F5Z.js → braces-Q86XHDaD.js} +1 -1
  9. package/dist/chunks/{calendar-preferences-dialog-CB5MA9gF.js → calendar-preferences-dialog-Bm7ji3k9.js} +1 -1
  10. package/dist/chunks/{calendar-preferences-dialog-BLz4PrDX.js → calendar-preferences-dialog-Cocogo9H.js} +3 -3
  11. package/dist/chunks/catalog-field-grounding-DmT7aGUA.js +191 -0
  12. package/dist/chunks/catalog-field-grounding-VgVzDd25.js +1 -0
  13. package/dist/chunks/{chevrons-up-down-CP6oFMrt.js → chevrons-up-down-BBTZ5pAY.js} +1 -1
  14. package/dist/chunks/{chevrons-up-down-B_66pVv5.js → chevrons-up-down-CYuWasy_.js} +1 -1
  15. package/dist/chunks/{dashboard-briefing-launcher-Bwz4mKOI.js → dashboard-briefing-launcher-BtqtLx1-.js} +1 -1
  16. package/dist/chunks/{dashboard-briefing-launcher-B7AxiecS.js → dashboard-briefing-launcher-DF4CoaRn.js} +4 -4
  17. package/dist/chunks/{dashboard-controls-DlN7FGW-.js → dashboard-controls-0VMAeMoa.js} +1 -1
  18. package/dist/chunks/{dashboard-controls-CbuKeeeP.js → dashboard-controls-B5U-VUxs.js} +6 -6
  19. package/dist/chunks/{dashboard-json-CeVrYTnR.js → dashboard-json-CqbLOfnr.js} +1 -1
  20. package/dist/chunks/{dashboard-json-gcpeSd5I.js → dashboard-json-Hmc0Ri5z.js} +2 -2
  21. package/dist/chunks/{edit-dashboard-visual-Kn1wtj-Z.js → edit-dashboard-visual-C0EDM0QB.js} +3 -3
  22. package/dist/chunks/{edit-dashboard-visual-BggRcCO2.js → edit-dashboard-visual-D4VVu-QQ.js} +1302 -1302
  23. package/dist/chunks/{index-CP3_hN7P.js → index-DE0vIuYG.js} +4 -4
  24. package/dist/chunks/{index-TA0tBZ1g.js → index-DzyUhzV3.js} +262 -270
  25. package/dist/chunks/{palette-BW7lzLOY.js → palette-B9AbDw0n.js} +1 -1
  26. package/dist/chunks/{palette-BueS2ZEM.js → palette-DalASD28.js} +1 -1
  27. package/dist/chunks/{resource-management-panel-vDrPcmXs.js → resource-management-panel-C4YydU9I.js} +3 -3
  28. package/dist/chunks/{resource-management-panel-DBYcMHVL.js → resource-management-panel-P9iNqBM1.js} +1 -1
  29. package/dist/chunks/{switch-B6fK1sl9.js → switch-BAYfpAEb.js} +1967 -2008
  30. package/dist/chunks/{switch-BT7khJGF.js → switch-CyRoZr5T.js} +35 -35
  31. package/dist/chunks/{use-create-flow-overlay-state-T8Su6dzu.js → use-create-flow-overlay-state-CbhjxI3W.js} +1 -1
  32. package/dist/chunks/{use-create-flow-overlay-state-DPYHfe-S.js → use-create-flow-overlay-state-P1LMwQ89.js} +3 -3
  33. package/dist/chunks/{use-visual-utils-wqosOqyY.js → use-visual-utils-CV6_-y4p.js} +1 -1
  34. package/dist/chunks/{use-visual-utils-Daov8_1p.js → use-visual-utils-lB-3Zk0b.js} +2 -2
  35. package/dist/chunks/validators-BuaRUBQI.js +561 -0
  36. package/dist/chunks/validators-x74uYpnG.js +2 -0
  37. package/dist/dashboard/index.cjs +1 -1
  38. package/dist/dashboard/index.js +1 -1
  39. package/dist/dashboard-authoring/index.cjs +3 -3
  40. package/dist/dashboard-authoring/index.js +378 -377
  41. package/dist/data-app-builder/index.cjs +1 -1
  42. package/dist/data-app-builder/index.js +1 -1
  43. package/dist/data-app-builder-browser-runtime/index.cjs +1 -1
  44. package/dist/data-app-builder-browser-runtime/index.js +4 -9
  45. package/dist/data-app-sdk/index.cjs +1 -1
  46. package/dist/data-app-sdk/index.js +1 -1
  47. package/dist/index.cjs +1 -1
  48. package/dist/index.js +7 -7
  49. package/dist/surfboard/index.cjs +1 -1
  50. package/dist/surfboard/index.js +2 -2
  51. package/dist/types/analytics-protocol.d.ts +90 -0
  52. package/dist/types/briefings.d.ts +12 -0
  53. package/dist/types/dashboard-authoring.d.ts +14 -0
  54. package/dist/types/data-app-builder.d.ts +14 -0
  55. package/dist/types/data-app-sdk.d.ts +14 -0
  56. package/dist/types/main.d.ts +14 -0
  57. package/package.json +1 -1
  58. package/dist/chunks/validators-DDAweCzB.js +0 -371
  59. package/dist/chunks/validators-odlRJblR.js +0 -2
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("../chunks/validators-odlRJblR.js");function s(e){return typeof e=="string"?e.trim().toLowerCase():""}function g(e){return String(e.column_name||e.name||e.qualifiedFieldName||"")}function y(e){return Array.from(new Set([e.column_name,e.name,e.qualifiedFieldName,e.alias].filter(a=>typeof a=="string"&&a.trim().length>0).map(a=>a.trim())))}function u(e){const a=s(e);return a?a.includes("int")||a.includes("numeric")||a.includes("decimal")||a.includes("double")||a.includes("float")||a.includes("number")||a.includes("real")||a.includes("money")?"number":a.includes("timestamp")||a.includes("datetime")||a==="time"||a.startsWith("time ")?"datetime":a.includes("date")?"date":a.includes("bool")?"boolean":"string":"unknown"}function h(e){const a=u(e);return a==="date"||a==="datetime"}function m(e){return h(e.dataType||e.data_type)}function p(e){const a=v(e);return a==="id"||a==="row_id"}function d(e){const a=v(e);return p(e)||a.endsWith("_id")||a.endsWith("_key")||a.endsWith("_number")}function v(e){return s(g(e)||e.name||e.alias).replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"")}function f(e,a={}){const t=s(e.role);return t==="metric"||t==="measure"?!a.excludeIdentifiers||!d(e):t==="groupby"||t==="dimension"||t==="date"||t==="id"?!1:u(e.dataType||e.data_type)==="number"&&(!a.excludeIdentifiers||!d(e))}function A(e){return!f(e)&&!m(e)}function S(e){return[e.column_name,e.name,e.label,e.alias,e.qualifiedFieldName].filter(a=>typeof a=="string"&&a.trim().length>0).map(a=>s(a).replace(/[^a-z0-9]+/g," ")).join(" ")}function c(e,a){return a.some(t=>{const i=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(`(^|\\s)${i}(\\s|$)`,"i").test(e)})}function T(e){const a=S(e);if(a)return c(a,["pct","percent","percentage","rate","ratio","share","conversion","retention","churn","growth","margin rate","margin pct","margin percent","margin percentage"])?{type:"percent",minimumFractionDigits:0,maximumFractionDigits:1,percentValueMode:"fraction"}:c(a,["revenue","sales","profit","arr","mrr","gmv","amount","price","cost","spend","expense","budget","income","value","booking","bookings"])?{type:"currency",currency:"USD",minimumFractionDigits:0,maximumFractionDigits:1,compact:!0}:c(a,["count","quantity","orders","order","users","customers","tickets","units","sessions","visits","items","rows"])?{type:"number",minimumFractionDigits:0,maximumFractionDigits:0,compact:!0}:{type:"number",minimumFractionDigits:0,maximumFractionDigits:1,compact:!0}}function k(e){const a=new Set,t=new Set,i=new Set;for(const o of e){if(p(o))continue;const l=y(o);if(l.length!==0){if(m(o)){l.forEach(r=>t.add(r));continue}if(f(o,{excludeIdentifiers:!0})){l.forEach(r=>a.add(r));continue}l.forEach(r=>i.add(r))}}return{validMetricCandidates:Array.from(a).sort(),validDateCandidates:Array.from(t).sort(),validDimensionCandidates:Array.from(i).sort()}}function D(e,a={}){const t=F(e),i={connectionId:a.connectionId,connectionType:e,path:["database","schema","table"],labels:{database:"Database",schema:"Schema",table:"Table"},prefixLevels:["database","schema","table"],dialect:"postgres",supportsFilterClause:!0};return t.includes("postgres")?{...i,prefixLevels:["schema","table"],dialect:"postgres"}:t.includes("mysql")?{...i,prefixLevels:["database","table"],dialect:"mysql",supportsFilterClause:!1}:t.includes("mssql")||t.includes("sqlserver")?{...i,dialect:"mssql",supportsFilterClause:!1}:t.includes("redshift")?{...i,prefixLevels:["schema","table"],dialect:"redshift"}:t.includes("snowflake")?{...i,dialect:"snowflake"}:t.includes("clickhouse")?{connectionId:a.connectionId,connectionType:e,path:["database","table"],labels:{database:"Database",table:"Table"},prefixLevels:["database","table"],dialect:"clickhouse",supportsFilterClause:!1}:t==="s3"||t==="api"?{connectionId:a.connectionId,connectionType:e,path:["table"],labels:{table:t==="api"?"API Table":"File Table"},prefixLevels:["table"],dialect:"duckdb",supportsFilterClause:!0}:t==="googlesheets"||t==="fileupload"?{connectionId:a.connectionId,connectionType:e,path:["table"],labels:{table:"Table"},prefixLevels:["table"],dialect:"postgres",supportsFilterClause:!0}:t==="s3tables"?{...i,labels:{database:"Database",schema:"Namespace",table:"Table"},dialect:"duckdb"}:t==="bigquery"?{...i,labels:{database:"Project",schema:"Dataset",table:"Table"},prefixLevels:["schema","table"],dialect:"bigquery",supportsFilterClause:!1}:i}function I(e){const a=F(e);switch(a){case"mysql":case"bigquery":case"redshift":case"snowflake":case"clickhouse":case"duckdb":case"sqlite":return a;case"mssql":case"sqlserver":return"mssql";case"postgres":case"postgresql":return"postgres";case"semantic":return"semantic";default:return"unknown"}}function q(e){return e.capabilities.prefixLevels.every(a=>!!C(e.source,a))}function _(e){const a=e.quoteIdentifier??N;return e.capabilities.prefixLevels.map(t=>C(e.source,t)).filter(t=>!!t).map(t=>a(t,e.capabilities.dialect)).join(".")}function C(e,a){return a==="database"?e.databaseName:a==="schema"?e.schemaName:e.tableName}function N(e,a){return a==="mysql"||a==="bigquery"||a==="clickhouse"||a==="duckdb"?`\`${e.replace(/`/g,"``")}\``:a==="mssql"?`[${e.replace(/]/g,"]]")}]`:`"${e.replace(/"/g,'""')}"`}function F(e){if(typeof e!="string")return"";const a=[];for(const t of e.trim().toLowerCase())x(t)&&a.push(t);return a.join("")}function x(e){const a=e.charCodeAt(0);return a>=48&&a<=57||a>=97&&a<=122}const n={kind:"semantic",domainId:"domain_sales",datasetName:"orders",connectionId:"conn_sales",label:"Orders"},L={revenueKpi:{version:1,kind:"metric",id:"revenue-kpi",label:"Revenue",source:n,metric:"revenue",comparison:{kind:"previous_period"},limit:1},revenueTrend:{version:1,kind:"records",id:"revenue-trend",label:"Revenue trend",source:n,fields:[{name:"order_date",role:"date",dataType:"date",label:"Order Date"}],measures:["revenue"],dateField:{name:"order_date",role:"date",dataType:"date"},timeGrain:"month",limit:100},topCustomersRecords:{version:1,kind:"records",id:"top-customers",label:"Top customers",source:n,fields:[{name:"customer_name",role:"dimension",dataType:"string"},{name:"segment",role:"dimension",dataType:"string"},{name:"revenue",role:"measure",dataType:"number"}],measures:["revenue"],orderBy:{field:"revenue",direction:"desc"},limit:20},regionInputOptions:{version:1,kind:"inputOptions",id:"region-options",label:"Region options",source:n,field:{name:"region",role:"dimension",dataType:"string"},limit:100},previousPeriodRevenueComparison:{version:1,kind:"metric",id:"revenue-previous-period",label:"Revenue previous period comparison",source:n,metric:"revenue",dateField:{name:"order_date",role:"date",dataType:"date"},timeGrain:"week",comparison:{kind:"previous_period"},limit:100},boundedSqlRanking:{version:1,kind:"sql",id:"top-customer-ranking-sql",label:"Top customer ranking SQL",source:{kind:"physical",connectionId:"conn_sales",databaseName:"warehouse",schemaName:"public",tableName:"orders",dialect:"postgres"},sql:"SELECT customer_name, SUM(revenue) AS revenue FROM public.orders GROUP BY customer_name ORDER BY revenue DESC LIMIT 20",limit:20,rationale:"Ranking is SQL-natural because it requires ordering grouped aggregate rows.",fields:[{name:"customer_name",role:"dimension",dataType:"string"},{name:"revenue",role:"measure",dataType:"number"}]}};exports.validateSemaphorAnalyticsIntent=b.validateSemaphorAnalyticsIntent;exports.validateSemaphorDashboardIntent=b.validateSemaphorDashboardIntent;exports.SEMAPHOR_ANALYTICS_INTENT_FIXTURES=L;exports.buildAnalyticsCatalogFieldSummary=k;exports.buildSemaphorQualifiedSourcePath=_;exports.getAnalyticsCatalogFieldCandidates=y;exports.getAnalyticsCatalogFieldName=g;exports.getSemaphorConnectionCapabilities=D;exports.inferAnalyticsMetricFormat=T;exports.isAnalyticsCatalogDateField=m;exports.isAnalyticsCatalogDimensionField=A;exports.isAnalyticsCatalogMetricField=f;exports.isAnalyticsDateLikeDataType=h;exports.isAnalyticsMetricIdentifierField=d;exports.isAnalyticsTechnicalIdentifierField=p;exports.normalizeAnalyticsCatalogDataType=u;exports.normalizeAnalyticsCatalogName=s;exports.normalizeSemaphorDialect=I;exports.semaphorSourceHasRequiredCoordinates=q;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("../chunks/validators-x74uYpnG.js"),t=require("../chunks/catalog-field-grounding-VgVzDd25.js");function d(e,a={}){const i=o(e),r={connectionId:a.connectionId,connectionType:e,path:["database","schema","table"],labels:{database:"Database",schema:"Schema",table:"Table"},prefixLevels:["database","schema","table"],dialect:"postgres",supportsFilterClause:!0};return i.includes("postgres")?{...r,prefixLevels:["schema","table"],dialect:"postgres"}:i.includes("mysql")?{...r,prefixLevels:["database","table"],dialect:"mysql",supportsFilterClause:!1}:i.includes("mssql")||i.includes("sqlserver")?{...r,dialect:"mssql",supportsFilterClause:!1}:i.includes("redshift")?{...r,prefixLevels:["schema","table"],dialect:"redshift"}:i.includes("snowflake")?{...r,dialect:"snowflake"}:i.includes("clickhouse")?{connectionId:a.connectionId,connectionType:e,path:["database","table"],labels:{database:"Database",table:"Table"},prefixLevels:["database","table"],dialect:"clickhouse",supportsFilterClause:!1}:i==="s3"||i==="api"?{connectionId:a.connectionId,connectionType:e,path:["table"],labels:{table:i==="api"?"API Table":"File Table"},prefixLevels:["table"],dialect:"duckdb",supportsFilterClause:!0}:i==="googlesheets"||i==="fileupload"?{connectionId:a.connectionId,connectionType:e,path:["table"],labels:{table:"Table"},prefixLevels:["table"],dialect:"postgres",supportsFilterClause:!0}:i==="s3tables"?{...r,labels:{database:"Database",schema:"Namespace",table:"Table"},dialect:"duckdb"}:i==="bigquery"?{...r,labels:{database:"Project",schema:"Dataset",table:"Table"},prefixLevels:["schema","table"],dialect:"bigquery",supportsFilterClause:!1}:r}function c(e){const a=o(e);switch(a){case"mysql":case"bigquery":case"redshift":case"snowflake":case"clickhouse":case"duckdb":case"sqlite":return a;case"mssql":case"sqlserver":return"mssql";case"postgres":case"postgresql":return"postgres";case"semantic":return"semantic";default:return"unknown"}}function u(e){return e.capabilities.prefixLevels.every(a=>!!l(e.source,a))}function m(e){const a=e.quoteIdentifier??p;return e.capabilities.prefixLevels.map(i=>l(e.source,i)).filter(i=>!!i).map(i=>a(i,e.capabilities.dialect)).join(".")}function l(e,a){return a==="database"?e.databaseName:a==="schema"?e.schemaName:e.tableName}function p(e,a){return a==="mysql"||a==="bigquery"||a==="clickhouse"||a==="duckdb"?`\`${e.replace(/`/g,"``")}\``:a==="mssql"?`[${e.replace(/]/g,"]]")}]`:`"${e.replace(/"/g,'""')}"`}function o(e){if(typeof e!="string")return"";const a=[];for(const i of e.trim().toLowerCase())b(i)&&a.push(i);return a.join("")}function b(e){const a=e.charCodeAt(0);return a>=48&&a<=57||a>=97&&a<=122}const s={kind:"semantic",domainId:"domain_sales",datasetName:"orders",connectionId:"conn_sales",label:"Orders"},f={revenueKpi:{version:1,kind:"metric",id:"revenue-kpi",label:"Revenue",source:s,metric:"revenue",comparison:{kind:"previous_period"},limit:1},revenueTrend:{version:1,kind:"records",id:"revenue-trend",label:"Revenue trend",source:s,fields:[{name:"order_date",role:"date",dataType:"date",label:"Order Date"}],measures:["revenue"],dateField:{name:"order_date",role:"date",dataType:"date"},timeGrain:"month",limit:100},topCustomersRecords:{version:1,kind:"records",id:"top-customers",label:"Top customers",source:s,fields:[{name:"customer_name",role:"dimension",dataType:"string"},{name:"segment",role:"dimension",dataType:"string"},{name:"revenue",role:"measure",dataType:"number"}],measures:["revenue"],orderBy:{field:"revenue",direction:"desc"},limit:20},regionInputOptions:{version:1,kind:"inputOptions",id:"region-options",label:"Region options",source:s,field:{name:"region",role:"dimension",dataType:"string"},limit:100},previousPeriodRevenueComparison:{version:1,kind:"metric",id:"revenue-previous-period",label:"Revenue previous period comparison",source:s,metric:"revenue",dateField:{name:"order_date",role:"date",dataType:"date"},timeGrain:"week",comparison:{kind:"previous_period"},limit:100},boundedSqlRanking:{version:1,kind:"sql",id:"top-customer-ranking-sql",label:"Top customer ranking SQL",source:{kind:"physical",connectionId:"conn_sales",databaseName:"warehouse",schemaName:"public",tableName:"orders",dialect:"postgres"},sql:"SELECT customer_name, SUM(revenue) AS revenue FROM public.orders GROUP BY customer_name ORDER BY revenue DESC LIMIT 20",limit:20,rationale:"Ranking is SQL-natural because it requires ordering grouped aggregate rows.",fields:[{name:"customer_name",role:"dimension",dataType:"string"},{name:"revenue",role:"measure",dataType:"number"}]}};exports.validateSemaphorAnalyticsIntent=n.validateSemaphorAnalyticsIntent;exports.validateSemaphorAnalyticsRecoveryPlan=n.validateSemaphorAnalyticsRecoveryPlan;exports.validateSemaphorDashboardIntent=n.validateSemaphorDashboardIntent;exports.validateSemaphorOperationIntent=n.validateSemaphorOperationIntent;exports.buildAnalyticsCatalogFieldSummary=t.buildAnalyticsCatalogFieldSummary;exports.getAnalyticsCatalogFieldCandidates=t.getAnalyticsCatalogFieldCandidates;exports.getAnalyticsCatalogFieldName=t.getAnalyticsCatalogFieldName;exports.inferAnalyticsMetricFormat=t.inferAnalyticsMetricFormat;exports.isAnalyticsCatalogDateField=t.isAnalyticsCatalogDateField;exports.isAnalyticsCatalogDimensionField=t.isAnalyticsCatalogDimensionField;exports.isAnalyticsCatalogMetricField=t.isAnalyticsCatalogMetricField;exports.isAnalyticsDateLikeDataType=t.isAnalyticsDateLikeDataType;exports.isAnalyticsMetricIdentifierField=t.isAnalyticsMetricIdentifierField;exports.isAnalyticsTechnicalIdentifierField=t.isAnalyticsTechnicalIdentifierField;exports.normalizeAnalyticsCatalogDataType=t.normalizeAnalyticsCatalogDataType;exports.normalizeAnalyticsCatalogName=t.normalizeAnalyticsCatalogName;exports.SEMAPHOR_ANALYTICS_INTENT_FIXTURES=f;exports.buildSemaphorQualifiedSourcePath=m;exports.getSemaphorConnectionCapabilities=d;exports.normalizeSemaphorDialect=c;exports.semaphorSourceHasRequiredCoordinates=u;
@@ -1,174 +1,8 @@
1
- import { v as R, a as z } from "../chunks/validators-DDAweCzB.js";
2
- function c(e) {
3
- return typeof e == "string" ? e.trim().toLowerCase() : "";
4
- }
5
- function h(e) {
6
- return String(e.column_name || e.name || e.qualifiedFieldName || "");
7
- }
8
- function v(e) {
9
- return Array.from(
10
- new Set(
11
- [
12
- e.column_name,
13
- e.name,
14
- e.qualifiedFieldName,
15
- e.alias
16
- ].filter(
17
- (t) => typeof t == "string" && t.trim().length > 0
18
- ).map((t) => t.trim())
19
- )
20
- );
21
- }
22
- function d(e) {
23
- const t = c(e);
24
- return t ? t.includes("int") || t.includes("numeric") || t.includes("decimal") || t.includes("double") || t.includes("float") || t.includes("number") || t.includes("real") || t.includes("money") ? "number" : t.includes("timestamp") || t.includes("datetime") || t === "time" || t.startsWith("time ") ? "datetime" : t.includes("date") ? "date" : t.includes("bool") ? "boolean" : "string" : "unknown";
25
- }
26
- function C(e) {
27
- const t = d(e);
28
- return t === "date" || t === "datetime";
29
- }
30
- function m(e) {
31
- return C(e.dataType || e.data_type);
32
- }
33
- function p(e) {
34
- const t = f(e);
35
- return t === "id" || t === "row_id";
36
- }
37
- function u(e) {
38
- const t = f(e);
39
- return p(e) || t.endsWith("_id") || t.endsWith("_key") || t.endsWith("_number");
40
- }
41
- function f(e) {
42
- return c(
43
- h(e) || e.name || e.alias
44
- ).replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
45
- }
46
- function b(e, t = {}) {
47
- const a = c(e.role);
48
- return a === "metric" || a === "measure" ? !t.excludeIdentifiers || !u(e) : a === "groupby" || a === "dimension" || a === "date" || a === "id" ? !1 : d(
49
- e.dataType || e.data_type
50
- ) === "number" && (!t.excludeIdentifiers || !u(e));
51
- }
52
- function q(e) {
53
- return !b(e) && !m(e);
54
- }
55
- function k(e) {
56
- return [
57
- e.column_name,
58
- e.name,
59
- e.label,
60
- e.alias,
61
- e.qualifiedFieldName
62
- ].filter(
63
- (t) => typeof t == "string" && t.trim().length > 0
64
- ).map(
65
- (t) => c(t).replace(/[^a-z0-9]+/g, " ")
66
- ).join(" ");
67
- }
68
- function l(e, t) {
69
- return t.some((a) => {
70
- const r = a.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
71
- return new RegExp(`(^|\\s)${r}(\\s|$)`, "i").test(e);
72
- });
73
- }
74
- function D(e) {
75
- const t = k(e);
76
- if (t)
77
- return l(t, [
78
- "pct",
79
- "percent",
80
- "percentage",
81
- "rate",
82
- "ratio",
83
- "share",
84
- "conversion",
85
- "retention",
86
- "churn",
87
- "growth",
88
- "margin rate",
89
- "margin pct",
90
- "margin percent",
91
- "margin percentage"
92
- ]) ? {
93
- type: "percent",
94
- minimumFractionDigits: 0,
95
- maximumFractionDigits: 1,
96
- percentValueMode: "fraction"
97
- } : l(t, [
98
- "revenue",
99
- "sales",
100
- "profit",
101
- "arr",
102
- "mrr",
103
- "gmv",
104
- "amount",
105
- "price",
106
- "cost",
107
- "spend",
108
- "expense",
109
- "budget",
110
- "income",
111
- "value",
112
- "booking",
113
- "bookings"
114
- ]) ? {
115
- type: "currency",
116
- currency: "USD",
117
- minimumFractionDigits: 0,
118
- maximumFractionDigits: 1,
119
- compact: !0
120
- } : l(t, [
121
- "count",
122
- "quantity",
123
- "orders",
124
- "order",
125
- "users",
126
- "customers",
127
- "tickets",
128
- "units",
129
- "sessions",
130
- "visits",
131
- "items",
132
- "rows"
133
- ]) ? {
134
- type: "number",
135
- minimumFractionDigits: 0,
136
- maximumFractionDigits: 0,
137
- compact: !0
138
- } : {
139
- type: "number",
140
- minimumFractionDigits: 0,
141
- maximumFractionDigits: 1,
142
- compact: !0
143
- };
144
- }
145
- function I(e) {
146
- const t = /* @__PURE__ */ new Set(), a = /* @__PURE__ */ new Set(), r = /* @__PURE__ */ new Set();
147
- for (const s of e) {
148
- if (p(s))
149
- continue;
150
- const o = v(s);
151
- if (o.length !== 0) {
152
- if (m(s)) {
153
- o.forEach((i) => a.add(i));
154
- continue;
155
- }
156
- if (b(s, { excludeIdentifiers: !0 })) {
157
- o.forEach((i) => t.add(i));
158
- continue;
159
- }
160
- o.forEach((i) => r.add(i));
161
- }
162
- }
163
- return {
164
- validMetricCandidates: Array.from(t).sort(),
165
- validDateCandidates: Array.from(a).sort(),
166
- validDimensionCandidates: Array.from(r).sort()
167
- };
168
- }
169
- function S(e, t = {}) {
170
- const a = y(e), r = {
171
- connectionId: t.connectionId,
1
+ import { v as g, b as v, c as h, a as y } from "../chunks/validators-BuaRUBQI.js";
2
+ import { k as C, a as I, g as q, j as T, c as S, h as A, f as F, i as L, e as R, d as N, b as _, n as D } from "../chunks/catalog-field-grounding-DmT7aGUA.js";
3
+ function d(e, a = {}) {
4
+ const s = n(e), r = {
5
+ connectionId: a.connectionId,
172
6
  connectionType: e,
173
7
  path: ["database", "schema", "table"],
174
8
  labels: {
@@ -180,28 +14,28 @@ function S(e, t = {}) {
180
14
  dialect: "postgres",
181
15
  supportsFilterClause: !0
182
16
  };
183
- return a.includes("postgres") ? {
17
+ return s.includes("postgres") ? {
184
18
  ...r,
185
19
  prefixLevels: ["schema", "table"],
186
20
  dialect: "postgres"
187
- } : a.includes("mysql") ? {
21
+ } : s.includes("mysql") ? {
188
22
  ...r,
189
23
  prefixLevels: ["database", "table"],
190
24
  dialect: "mysql",
191
25
  supportsFilterClause: !1
192
- } : a.includes("mssql") || a.includes("sqlserver") ? {
26
+ } : s.includes("mssql") || s.includes("sqlserver") ? {
193
27
  ...r,
194
28
  dialect: "mssql",
195
29
  supportsFilterClause: !1
196
- } : a.includes("redshift") ? {
30
+ } : s.includes("redshift") ? {
197
31
  ...r,
198
32
  prefixLevels: ["schema", "table"],
199
33
  dialect: "redshift"
200
- } : a.includes("snowflake") ? {
34
+ } : s.includes("snowflake") ? {
201
35
  ...r,
202
36
  dialect: "snowflake"
203
- } : a.includes("clickhouse") ? {
204
- connectionId: t.connectionId,
37
+ } : s.includes("clickhouse") ? {
38
+ connectionId: a.connectionId,
205
39
  connectionType: e,
206
40
  path: ["database", "table"],
207
41
  labels: {
@@ -211,18 +45,18 @@ function S(e, t = {}) {
211
45
  prefixLevels: ["database", "table"],
212
46
  dialect: "clickhouse",
213
47
  supportsFilterClause: !1
214
- } : a === "s3" || a === "api" ? {
215
- connectionId: t.connectionId,
48
+ } : s === "s3" || s === "api" ? {
49
+ connectionId: a.connectionId,
216
50
  connectionType: e,
217
51
  path: ["table"],
218
52
  labels: {
219
- table: a === "api" ? "API Table" : "File Table"
53
+ table: s === "api" ? "API Table" : "File Table"
220
54
  },
221
55
  prefixLevels: ["table"],
222
56
  dialect: "duckdb",
223
57
  supportsFilterClause: !0
224
- } : a === "googlesheets" || a === "fileupload" ? {
225
- connectionId: t.connectionId,
58
+ } : s === "googlesheets" || s === "fileupload" ? {
59
+ connectionId: a.connectionId,
226
60
  connectionType: e,
227
61
  path: ["table"],
228
62
  labels: {
@@ -231,7 +65,7 @@ function S(e, t = {}) {
231
65
  prefixLevels: ["table"],
232
66
  dialect: "postgres",
233
67
  supportsFilterClause: !0
234
- } : a === "s3tables" ? {
68
+ } : s === "s3tables" ? {
235
69
  ...r,
236
70
  labels: {
237
71
  database: "Database",
@@ -239,7 +73,7 @@ function S(e, t = {}) {
239
73
  table: "Table"
240
74
  },
241
75
  dialect: "duckdb"
242
- } : a === "bigquery" ? {
76
+ } : s === "bigquery" ? {
243
77
  ...r,
244
78
  labels: {
245
79
  database: "Project",
@@ -251,9 +85,9 @@ function S(e, t = {}) {
251
85
  supportsFilterClause: !1
252
86
  } : r;
253
87
  }
254
- function _(e) {
255
- const t = y(e);
256
- switch (t) {
88
+ function c(e) {
89
+ const a = n(e);
90
+ switch (a) {
257
91
  case "mysql":
258
92
  case "bigquery":
259
93
  case "redshift":
@@ -261,7 +95,7 @@ function _(e) {
261
95
  case "clickhouse":
262
96
  case "duckdb":
263
97
  case "sqlite":
264
- return t;
98
+ return a;
265
99
  case "mssql":
266
100
  case "sqlserver":
267
101
  return "mssql";
@@ -274,46 +108,46 @@ function _(e) {
274
108
  return "unknown";
275
109
  }
276
110
  }
277
- function A(e) {
111
+ function u(e) {
278
112
  return e.capabilities.prefixLevels.every(
279
- (t) => !!g(e.source, t)
113
+ (a) => !!i(e.source, a)
280
114
  );
281
115
  }
282
- function x(e) {
283
- const t = e.quoteIdentifier ?? F;
284
- return e.capabilities.prefixLevels.map((a) => g(e.source, a)).filter((a) => !!a).map((a) => t(a, e.capabilities.dialect)).join(".");
116
+ function m(e) {
117
+ const a = e.quoteIdentifier ?? l;
118
+ return e.capabilities.prefixLevels.map((s) => i(e.source, s)).filter((s) => !!s).map((s) => a(s, e.capabilities.dialect)).join(".");
285
119
  }
286
- function g(e, t) {
287
- return t === "database" ? e.databaseName : t === "schema" ? e.schemaName : e.tableName;
120
+ function i(e, a) {
121
+ return a === "database" ? e.databaseName : a === "schema" ? e.schemaName : e.tableName;
288
122
  }
289
- function F(e, t) {
290
- return t === "mysql" || t === "bigquery" || t === "clickhouse" || t === "duckdb" ? `\`${e.replace(/`/g, "``")}\`` : t === "mssql" ? `[${e.replace(/]/g, "]]")}]` : `"${e.replace(/"/g, '""')}"`;
123
+ function l(e, a) {
124
+ return a === "mysql" || a === "bigquery" || a === "clickhouse" || a === "duckdb" ? `\`${e.replace(/`/g, "``")}\`` : a === "mssql" ? `[${e.replace(/]/g, "]]")}]` : `"${e.replace(/"/g, '""')}"`;
291
125
  }
292
- function y(e) {
126
+ function n(e) {
293
127
  if (typeof e != "string")
294
128
  return "";
295
- const t = [];
296
- for (const a of e.trim().toLowerCase())
297
- T(a) && t.push(a);
298
- return t.join("");
129
+ const a = [];
130
+ for (const s of e.trim().toLowerCase())
131
+ o(s) && a.push(s);
132
+ return a.join("");
299
133
  }
300
- function T(e) {
301
- const t = e.charCodeAt(0);
302
- return t >= 48 && t <= 57 || t >= 97 && t <= 122;
134
+ function o(e) {
135
+ const a = e.charCodeAt(0);
136
+ return a >= 48 && a <= 57 || a >= 97 && a <= 122;
303
137
  }
304
- const n = {
138
+ const t = {
305
139
  kind: "semantic",
306
140
  domainId: "domain_sales",
307
141
  datasetName: "orders",
308
142
  connectionId: "conn_sales",
309
143
  label: "Orders"
310
- }, w = {
144
+ }, p = {
311
145
  revenueKpi: {
312
146
  version: 1,
313
147
  kind: "metric",
314
148
  id: "revenue-kpi",
315
149
  label: "Revenue",
316
- source: n,
150
+ source: t,
317
151
  metric: "revenue",
318
152
  comparison: { kind: "previous_period" },
319
153
  limit: 1
@@ -323,7 +157,7 @@ const n = {
323
157
  kind: "records",
324
158
  id: "revenue-trend",
325
159
  label: "Revenue trend",
326
- source: n,
160
+ source: t,
327
161
  fields: [
328
162
  { name: "order_date", role: "date", dataType: "date", label: "Order Date" }
329
163
  ],
@@ -337,7 +171,7 @@ const n = {
337
171
  kind: "records",
338
172
  id: "top-customers",
339
173
  label: "Top customers",
340
- source: n,
174
+ source: t,
341
175
  fields: [
342
176
  { name: "customer_name", role: "dimension", dataType: "string" },
343
177
  { name: "segment", role: "dimension", dataType: "string" },
@@ -352,7 +186,7 @@ const n = {
352
186
  kind: "inputOptions",
353
187
  id: "region-options",
354
188
  label: "Region options",
355
- source: n,
189
+ source: t,
356
190
  field: { name: "region", role: "dimension", dataType: "string" },
357
191
  limit: 100
358
192
  },
@@ -361,7 +195,7 @@ const n = {
361
195
  kind: "metric",
362
196
  id: "revenue-previous-period",
363
197
  label: "Revenue previous period comparison",
364
- source: n,
198
+ source: t,
365
199
  metric: "revenue",
366
200
  dateField: { name: "order_date", role: "date", dataType: "date" },
367
201
  timeGrain: "week",
@@ -391,23 +225,25 @@ const n = {
391
225
  }
392
226
  };
393
227
  export {
394
- w as SEMAPHOR_ANALYTICS_INTENT_FIXTURES,
395
- I as buildAnalyticsCatalogFieldSummary,
396
- x as buildSemaphorQualifiedSourcePath,
397
- v as getAnalyticsCatalogFieldCandidates,
398
- h as getAnalyticsCatalogFieldName,
399
- S as getSemaphorConnectionCapabilities,
400
- D as inferAnalyticsMetricFormat,
401
- m as isAnalyticsCatalogDateField,
402
- q as isAnalyticsCatalogDimensionField,
403
- b as isAnalyticsCatalogMetricField,
404
- C as isAnalyticsDateLikeDataType,
405
- u as isAnalyticsMetricIdentifierField,
406
- p as isAnalyticsTechnicalIdentifierField,
407
- d as normalizeAnalyticsCatalogDataType,
408
- c as normalizeAnalyticsCatalogName,
409
- _ as normalizeSemaphorDialect,
410
- A as semaphorSourceHasRequiredCoordinates,
411
- R as validateSemaphorAnalyticsIntent,
412
- z as validateSemaphorDashboardIntent
228
+ p as SEMAPHOR_ANALYTICS_INTENT_FIXTURES,
229
+ C as buildAnalyticsCatalogFieldSummary,
230
+ m as buildSemaphorQualifiedSourcePath,
231
+ I as getAnalyticsCatalogFieldCandidates,
232
+ q as getAnalyticsCatalogFieldName,
233
+ d as getSemaphorConnectionCapabilities,
234
+ T as inferAnalyticsMetricFormat,
235
+ S as isAnalyticsCatalogDateField,
236
+ A as isAnalyticsCatalogDimensionField,
237
+ F as isAnalyticsCatalogMetricField,
238
+ L as isAnalyticsDateLikeDataType,
239
+ R as isAnalyticsMetricIdentifierField,
240
+ N as isAnalyticsTechnicalIdentifierField,
241
+ _ as normalizeAnalyticsCatalogDataType,
242
+ D as normalizeAnalyticsCatalogName,
243
+ c as normalizeSemaphorDialect,
244
+ u as semaphorSourceHasRequiredCoordinates,
245
+ g as validateSemaphorAnalyticsIntent,
246
+ v as validateSemaphorAnalyticsRecoveryPlan,
247
+ h as validateSemaphorDashboardIntent,
248
+ y as validateSemaphorOperationIntent
413
249
  };
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),m=require("react"),d=require("../chunks/switch-BT7khJGF.js"),A=require("../chunks/index-DRlMUglg.js");require("../chunks/index-BxM99sFL.js");const V=require("../chunks/palette-BueS2ZEM.js"),ge=require("../chunks/braces-DlW7C5BH.js");/**
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),m=require("react"),d=require("../chunks/switch-CyRoZr5T.js"),A=require("../chunks/index-DRlMUglg.js");require("../chunks/index-BxM99sFL.js");const V=require("../chunks/palette-DalASD28.js"),ge=require("../chunks/braces-BLa_lORs.js");/**
2
2
  * @license lucide-react v0.453.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,10 +1,10 @@
1
1
  import { jsxs as d, jsx as r, Fragment as ce } from "react/jsx-runtime";
2
2
  import m from "react";
3
- import { c as $, a as K, P as ge, b as be, B as C, d as fe, U as De, C as Ie, R as me, f as le, S as Je, X as je, J as se, e as Le, T as $e, K as _e, M, N as Ve, O as G, Q as Ue, V as Me, W as Ge, Y as We, L as E, Z as Q, _ as ee, $ as re, a0 as he, a1 as oe, a2 as ae, a3 as xe, a4 as ye, a5 as ke, a6 as ve, a7 as Ce, a8 as He } from "../chunks/switch-B6fK1sl9.js";
3
+ import { c as $, a as K, P as ge, b as be, B as C, d as fe, U as De, C as Ie, R as me, f as le, S as Je, X as je, J as se, e as Le, T as $e, K as _e, M, N as Ve, O as G, Q as Ue, V as Me, W as Ge, Y as We, L as E, Z as Q, _ as ee, $ as re, a0 as he, a1 as oe, a2 as ae, a3 as xe, a4 as ye, a5 as ke, a6 as ve, a7 as Ce, a8 as He } from "../chunks/switch-BAYfpAEb.js";
4
4
  import { r as Ye, v as Xe, A as Ze, a as qe, p as Ke } from "../chunks/index-CJdxSyQq.js";
5
5
  import "../chunks/index-CuHybtft.js";
6
- import { P as W } from "../chunks/palette-BW7lzLOY.js";
7
- import { B as Qe } from "../chunks/braces-DYx37F5Z.js";
6
+ import { P as W } from "../chunks/palette-B9AbDw0n.js";
7
+ import { B as Qe } from "../chunks/braces-Q86XHDaD.js";
8
8
  /**
9
9
  * @license lucide-react v0.453.0 - ISC
10
10
  *
@@ -1 +1 @@
1
- "use strict";var Q=Object.defineProperty;var ee=(n,t,e)=>t in n?Q(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e;var j=(n,t,e)=>ee(n,typeof t!="symbol"?t+"":t,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const _="BRIEFING",K=["markdown","html"],B=["markdown"],k=20,l={name:500,description:2e3,instruction:5e4,customMessage:5e4,contentTitle:500,contentSummary:2e4,contentText:5e3,contentItem:2e3,contentCell:500,attachmentTitle:500,presentationAudience:1e3,presentationTone:500,presentationFormat:2e3,id:500},g={maxBlocks:50,maxTableRows:100,maxTableColumns:20,maxTableCellCharacters:l.contentCell,maxParagraphCharacters:l.contentText,maxFindingCharacters:l.contentText,maxListItems:100,maxKpiTiles:8},q=new Set(K),te=new Set(["EMAIL","WEBHOOK","SLACK","IN_APP","TELEGRAM"]),D={maxToolCalls:{min:1,max:100},maxRows:{min:1,max:1e5},timeoutMs:{min:1e3,max:30*6e4}},ne=new Set(["letter","legal","a4","a3","tabloid"]),re=new Set(["portrait","landscape"]),oe=new Set([",",";"," "]),ie=new Set(["current","all"]),ae=new Set(["concise","balanced","detailed"]),ce=new Set(["info","positive","warning","critical"]),de=new Set(["text","number","currency","percent","date","boolean"]),le=new Set(["left","center","right"]),fe=["pageSize","orientation","includeFilters","includeTimestamp","delimiter","includeHeaders","useFormattedValues","sheetSelection","currentSheetId","currentSheetName","filterValues","inlineFilterValues","sheetFilterValues","filterLine","controlValues","controlDefinitions","cardControlDefinitions","controlBindings","tablePreferences","dashboardInputExecutionSnapshot","selectedSheetId","cardType","theme"];class x extends Error{constructor(e){super(e.map(r=>`${r.field}: ${r.message}`).join("; "));j(this,"issues");this.name="BriefingContractError",this.issues=e}}function G(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function c(n,t,e){n.push({field:t,message:e})}function v(n,t,e){return G(n)?n:(c(e,t,"Expected an object."),{})}function s(n,t,e,r){const o=new Set(e);Object.keys(n).forEach(i=>{o.has(i)||c(r,t?`${t}.${i}`:i,`Unexpected field "${i}".`)})}function p(n,t,e,r){if(typeof n!="string")return c(r,t,"Expected a string."),"";const o=n.trim();return o?(o.length>e&&c(r,t,`Must be ${e} characters or fewer.`),o):(c(r,t,"Required value cannot be empty."),"")}function y(n,t,e,r){if(n==null)return;if(typeof n!="string"){c(r,t,"Expected a string.");return}const o=n.trim();if(o)return o.length>e&&c(r,t,`Must be ${e} characters or fewer.`),o}function se(n,t,e){if(n!=null){if(!Number.isInteger(n)||Number(n)<0){c(e,t,"Expected a non-negative integer.");return}return Number(n)}}function $(n,t,e,r={}){if(n==null)return r.required?(c(e,t,"Expected at least one evidence id."),[]):void 0;if(!Array.isArray(n))return c(e,t,"Expected an array."),r.required?[]:void 0;const o=[];return n.forEach((i,a)=>{const d=p(i,`${t}.${a}`,l.id,e);d&&!o.includes(d)&&o.push(d)}),r.required&&o.length===0&&c(e,t,"Expected at least one evidence id."),o.length>0||r.required?o:void 0}function C(n,t,e,r){return n==null?t:typeof n!="boolean"?(c(r,e,"Expected a boolean."),t):n}function me(n,t){return n==null?"ACTIVE":n==="ACTIVE"||n==="PAUSED"||n==="DISABLED"?n:(c(t,"status","Expected ACTIVE, PAUSED, or DISABLED."),"ACTIVE")}function ue(n){return n.includes("@")&&n.includes(".")&&!n.includes(" ")}function U(n,t){if(n==null)return{type:"project"};const e=v(n,"source",t),r=e.type;return r==="project"?(s(e,"source",["type"],t),{type:"project"}):r==="dashboard"?(s(e,"source",["type","dashboardId"],t),{type:"dashboard",dashboardId:p(e.dashboardId,"source.dashboardId",l.id,t)}):(c(t,"source.type","Expected project or dashboard."),{type:"project"})}function H(n,t){const e=v(n,"body",t),r=e.type;return r==="generated_analysis"?(s(e,"body",["type","instruction"],t),{type:"generated_analysis",instruction:p(e.instruction,"body.instruction",l.instruction,t)}):r==="custom_message"?(s(e,"body",["type","message"],t),{type:"custom_message",message:p(e.message,"body.message",l.customMessage,t)}):r==="none"?(s(e,"body",["type"],t),{type:"none"}):(c(t,"body.type","Expected generated_analysis, custom_message, or none."),{type:"none"})}function pe(n,t){if(n==null)return[...B];if(!Array.isArray(n))return c(t,"presentation.artifactFormats","Expected an array."),[...B];if(n.length===0)return c(t,"presentation.artifactFormats","Choose at least one artifact format."),[];const e=[];return n.forEach((r,o)=>{if(typeof r!="string"||!q.has(r)){c(t,`presentation.artifactFormats.${o}`,"Expected markdown or html.");return}e.includes(r)||e.push(r)}),e}function J(n,t){if(n==null)return{artifactFormats:[...B],includeEvidence:!0,includeSql:!0};const e=v(n,"presentation",t);s(e,"presentation",["artifactFormats","includeEvidence","includeSql","audience","tone","format"],t);const r={artifactFormats:pe(e.artifactFormats,t),includeEvidence:C(e.includeEvidence,!0,"presentation.includeEvidence",t),includeSql:C(e.includeSql,!0,"presentation.includeSql",t)},o=y(e.audience,"presentation.audience",l.presentationAudience,t),i=y(e.tone,"presentation.tone",l.presentationTone,t),a=y(e.format,"presentation.format",l.presentationFormat,t);return o&&(r.audience=o),i&&(r.tone=i),a&&(r.format=a),r}function ye(n,t,e){return Array.isArray(n)?(n.length===0&&c(e,t,"Expected at least one item."),n.length>g.maxListItems&&c(e,t,`Must have ${g.maxListItems} items or fewer.`),n.slice(0,g.maxListItems).map((r,o)=>p(r,`${t}.${o}`,l.contentItem,e)).filter(Boolean)):(c(e,t,"Expected an array."),[])}function he(n,t,e){return n===null||typeof n=="string"||typeof n=="number"||typeof n=="boolean"?typeof n=="string"&&n.length>l.contentCell?(c(e,t,`Must be ${l.contentCell} characters or fewer.`),n.slice(0,l.contentCell)):typeof n=="number"&&!Number.isFinite(n)?(c(e,t,"Expected a finite number."),null):n:(c(e,t,"Expected a string, number, boolean, or null."),null)}function ve(n,t,e){if(!Array.isArray(n))return c(e,t,"Expected an array."),[];n.length===0&&c(e,t,"Expected at least one column."),n.length>g.maxTableColumns&&c(e,t,`Must have ${g.maxTableColumns} columns or fewer.`);const r=new Set;return n.slice(0,g.maxTableColumns).map((o,i)=>{const a=`${t}.${i}`,d=v(o,a,e);s(d,a,["key","label","kind","align"],e);const m=p(d.key,`${a}.key`,l.id,e);m&&(r.has(m)&&c(e,`${a}.key`,"Column key must be unique."),r.add(m));const f=p(d.label,`${a}.label`,l.contentTitle,e),u=E(d.kind,`${a}.kind`,de,"text, number, currency, percent, date, or boolean",e),I=E(d.align,`${a}.align`,le,"left, center, or right",e);return{key:m,label:f,...u?{kind:u}:{},...I?{align:I}:{}}})}function ge(n,t,e,r){if(!Array.isArray(n))return c(r,t,"Expected an array."),[];n.length>g.maxTableRows&&c(r,t,`Must have ${g.maxTableRows} rows or fewer.`);const o=new Set(e.map(i=>i.key).filter(Boolean));return n.slice(0,g.maxTableRows).map((i,a)=>{const d=`${t}.${a}`,m=v(i,d,r);return Object.keys(m).forEach(f=>{o.has(f)||c(r,`${d}.${f}`,`Unexpected table cell "${f}".`)}),Object.fromEntries(e.map(f=>[f.key,he(m[f.key]??null,`${d}.${f.key}`,r)]))})}function Ie(n,t,e){const r=`content.blocks.${t}`,o=v(n,r,e),i=o.type;if(i==="heading"){s(o,r,["type","text","level","evidenceIds"],e);const a=o.level===void 0||o.level===null?void 0:o.level===2||o.level===3?o.level:void 0;o.level!==void 0&&o.level!==null&&a===void 0&&c(e,`${r}.level`,"Expected 2 or 3.");const d=$(o.evidenceIds,`${r}.evidenceIds`,e);return{type:"heading",text:p(o.text,`${r}.text`,l.contentTitle,e),...a?{level:a}:{},...d?{evidenceIds:d}:{}}}if(i==="paragraph"){s(o,r,["type","text","evidenceIds"],e);const a=$(o.evidenceIds,`${r}.evidenceIds`,e);return{type:"paragraph",text:p(o.text,`${r}.text`,l.contentText,e),...a?{evidenceIds:a}:{}}}if(i==="finding"){s(o,r,["type","title","text","severity","evidenceIds"],e);const a=y(o.title,`${r}.title`,l.contentTitle,e),d=E(o.severity,`${r}.severity`,ce,"info, positive, warning, or critical",e);return{type:"finding",...a?{title:a}:{},text:p(o.text,`${r}.text`,l.contentText,e),...d?{severity:d}:{},evidenceIds:$(o.evidenceIds,`${r}.evidenceIds`,e,{required:!0})??[]}}if(i==="bullets"||i==="actions"||i==="limitations"){s(o,r,["type","title","items","evidenceIds"],e);const a=y(o.title,`${r}.title`,l.contentTitle,e),d=$(o.evidenceIds,`${r}.evidenceIds`,e);return{type:i,...a?{title:a}:{},items:ye(o.items,`${r}.items`,e),...d?{evidenceIds:d}:{}}}if(i==="metric"){s(o,r,["type","label","value","previousValue","delta","unit","evidenceIds"],e);const a=typeof o.value=="string"||typeof o.value=="number"?o.value:"";a===""&&c(e,`${r}.value`,"Expected a string or number.");const d=o.previousValue===void 0||o.previousValue===null||typeof o.previousValue=="string"||typeof o.previousValue=="number"?o.previousValue:void 0;o.previousValue!==void 0&&o.previousValue!==null&&d===void 0&&c(e,`${r}.previousValue`,"Expected a string, number, or null.");const m=o.delta===void 0||o.delta===null||typeof o.delta=="string"||typeof o.delta=="number"?o.delta:void 0;o.delta!==void 0&&o.delta!==null&&m===void 0&&c(e,`${r}.delta`,"Expected a string, number, or null.");const f=y(o.unit,`${r}.unit`,l.contentTitle,e),u=$(o.evidenceIds,`${r}.evidenceIds`,e);return{type:"metric",label:p(o.label,`${r}.label`,l.contentTitle,e),value:a,...d!==void 0?{previousValue:d}:{},...m!==void 0?{delta:m}:{},...f?{unit:f}:{},...u?{evidenceIds:u}:{}}}if(i==="kpi_grid"){s(o,r,["type","title","tiles","evidenceIds"],e);const a=y(o.title,`${r}.title`,l.contentTitle,e),d=Array.isArray(o.tiles)?o.tiles:[];Array.isArray(o.tiles)||c(e,`${r}.tiles`,"Expected an array."),d.length===0&&c(e,`${r}.tiles`,"Expected at least one tile."),d.length>g.maxKpiTiles&&c(e,`${r}.tiles`,`Must have ${g.maxKpiTiles} tiles or fewer.`);const m=d.slice(0,g.maxKpiTiles).map((u,I)=>{const b=`${r}.tiles.${I}`,h=v(u,b,e);s(h,b,["label","value","previousValue","delta","unit","evidenceIds"],e);const O=typeof h.value=="string"||typeof h.value=="number"?h.value:"";O===""&&c(e,`${b}.value`,"Expected a string or number.");const R=h.previousValue===void 0||h.previousValue===null||typeof h.previousValue=="string"||typeof h.previousValue=="number"?h.previousValue:void 0;h.previousValue!==void 0&&h.previousValue!==null&&R===void 0&&c(e,`${b}.previousValue`,"Expected a string, number, or null.");const w=h.delta===void 0||h.delta===null||typeof h.delta=="string"||typeof h.delta=="number"?h.delta:void 0;h.delta!==void 0&&h.delta!==null&&w===void 0&&c(e,`${b}.delta`,"Expected a string, number, or null.");const M=y(h.unit,`${b}.unit`,l.contentTitle,e),P=$(h.evidenceIds,`${b}.evidenceIds`,e);return{label:p(h.label,`${b}.label`,l.contentTitle,e),value:O,...R!==void 0?{previousValue:R}:{},...w!==void 0?{delta:w}:{},...M?{unit:M}:{},...P?{evidenceIds:P}:{}}}),f=$(o.evidenceIds,`${r}.evidenceIds`,e);return{type:"kpi_grid",...a?{title:a}:{},tiles:m,...f?{evidenceIds:f}:{}}}if(i==="table"){s(o,r,["type","id","title","columns","rows","caption","totalRows","evidenceIds"],e);const a=ve(o.columns,`${r}.columns`,e),d=y(o.title,`${r}.title`,l.contentTitle,e),m=y(o.id,`${r}.id`,l.id,e),f=y(o.caption,`${r}.caption`,l.contentItem,e),u=se(o.totalRows,`${r}.totalRows`,e),I=$(o.evidenceIds,`${r}.evidenceIds`,e);return{type:"table",...m?{id:m}:{},...d?{title:d}:{},columns:a,rows:ge(o.rows,`${r}.rows`,a,e),...f?{caption:f}:{},...u!==void 0?{totalRows:u}:{},...I?{evidenceIds:I}:{}}}if(i==="evidence_appendix"){s(o,r,["type","title","evidenceIds"],e);const a=y(o.title,`${r}.title`,l.contentTitle,e);return{type:"evidence_appendix",...a?{title:a}:{},evidenceIds:$(o.evidenceIds,`${r}.evidenceIds`,e,{required:!0})??[]}}return c(e,`${r}.type`,"Expected heading, paragraph, finding, bullets, metric, kpi_grid, table, actions, limitations, or evidence_appendix."),{type:"paragraph",text:""}}function X(n){const t=[],e=v(n,"content",t);s(e,"content",["version","title","summary","blocks"],t),e.version!==1&&c(t,"content.version","Expected version 1.");const r=y(e.title,"content.title",l.contentTitle,t),o=y(e.summary,"content.summary",l.contentSummary,t);Array.isArray(e.blocks)||c(t,"content.blocks","Expected an array.");const i=Array.isArray(e.blocks)?e.blocks:[];i.length===0&&c(t,"content.blocks","Expected at least one block."),i.length>g.maxBlocks&&c(t,"content.blocks",`Must have ${g.maxBlocks} blocks or fewer.`);const a=i.slice(0,g.maxBlocks).map((d,m)=>Ie(d,m,t));return V(t),{version:1,...r?{title:r}:{},...o?{summary:o}:{},blocks:a}}function be(n){try{return{valid:!0,value:X(n),issues:[]}}catch(t){if(t instanceof x)return{valid:!1,issues:t.issues};throw t}}function T(n,t,e,r){return typeof n=="string"&&e.includes(n)?n:(c(r,t,`Expected ${e.join(" or ")}.`),e[0])}function E(n,t,e,r,o){if(n!=null){if(typeof n=="string"&&e.has(n))return n;c(o,t,`Expected ${r}.`)}}function $e(n,t,e){if(n!=null){if(!Array.isArray(n)){c(e,t,"Expected an array.");return}return n}}function Ee(n,t,e){if(n!=null){if(!G(n)){c(e,t,"Expected an object.");return}return n}}function Ce(n,t,e){if(n==null)return;const r=v(n,t,e);s(r,t,fe,e);const o={},i=E(r.pageSize,`${t}.pageSize`,ne,"letter, legal, a4, a3, or tabloid",e),a=E(r.orientation,`${t}.orientation`,re,"portrait or landscape",e),d=E(r.delimiter,`${t}.delimiter`,oe,"comma, semicolon, or tab",e),m=E(r.sheetSelection,`${t}.sheetSelection`,ie,"current or all",e);i&&(o.pageSize=i),a&&(o.orientation=a),d&&(o.delimiter=d),m&&(o.sheetSelection=m);for(const f of["includeFilters","includeTimestamp","includeHeaders","useFormattedValues"])if(!(r[f]===void 0||r[f]===null)){if(typeof r[f]!="boolean"){c(e,`${t}.${f}`,"Expected a boolean.");continue}o[f]=r[f]}for(const f of["currentSheetId","currentSheetName","filterLine","selectedSheetId","cardType","theme"]){const u=y(r[f],`${t}.${f}`,l.id,e);u&&(o[f]=u)}for(const f of["filterValues","inlineFilterValues","sheetFilterValues","controlDefinitions","cardControlDefinitions","controlBindings"]){const u=$e(r[f],`${t}.${f}`,e);u&&(o[f]=u)}for(const f of["controlValues","tablePreferences","dashboardInputExecutionSnapshot"]){const u=Ee(r[f],`${t}.${f}`,e);u&&(o[f]=u)}return Object.keys(o).length>0?o:void 0}function A(n,t,e,r){const o=y(t,e,l.attachmentTitle,r);return o&&(n.title=o),n}function S(n,t,e,r){const o=Ce(t,e,r);return o&&(n.settings=o),n}function Te(n,t,e){const r=`attachments.${t}`,o=v(n,r,e),i=o.type;if(i==="dashboard"){s(o,r,["type","dashboardId","format","title","settings"],e);const a=A({type:"dashboard",dashboardId:p(o.dashboardId,`${r}.dashboardId`,l.id,e),format:T(o.format,`${r}.format`,["pdf"],e)},o.title,`${r}.title`,e);return S(a,o.settings,`${r}.settings`,e)}if(i==="dashboard_sheet"||i==="document_sheet"){s(o,r,["type","dashboardId","sheetId","format","title","settings"],e);const a=A({type:i,dashboardId:p(o.dashboardId,`${r}.dashboardId`,l.id,e),sheetId:p(o.sheetId,`${r}.sheetId`,l.id,e),format:T(o.format,`${r}.format`,["pdf"],e)},o.title,`${r}.title`,e);return S(a,o.settings,`${r}.settings`,e)}if(i==="visual"){s(o,r,["type","dashboardId","visualId","format","title","settings"],e);const a=A({type:"visual",dashboardId:p(o.dashboardId,`${r}.dashboardId`,l.id,e),visualId:p(o.visualId,`${r}.visualId`,l.id,e),format:T(o.format,`${r}.format`,["pdf","png"],e)},o.title,`${r}.title`,e);return S(a,o.settings,`${r}.settings`,e)}if(i==="card"){s(o,r,["type","dashboardId","cardId","format","title","settings"],e);const a=A({type:"card",dashboardId:p(o.dashboardId,`${r}.dashboardId`,l.id,e),cardId:p(o.cardId,`${r}.cardId`,l.id,e),format:T(o.format,`${r}.format`,["csv","pdf","png"],e)},o.title,`${r}.title`,e);return S(a,o.settings,`${r}.settings`,e)}return c(e,`${r}.type`,"Expected dashboard, dashboard_sheet, document_sheet, visual, or card."),{type:"dashboard",dashboardId:"",format:"pdf"}}function xe(n){switch(n.type){case"dashboard":return`${n.type}:${n.dashboardId}:${n.format}`;case"dashboard_sheet":case"document_sheet":return`${n.type}:${n.dashboardId}:${n.sheetId}:${n.format}`;case"visual":return`${n.type}:${n.dashboardId}:${n.visualId}:${n.format}`;case"card":return`${n.type}:${n.dashboardId}:${n.cardId}:${n.format}`}}function W(n,t){if(n==null)return[];if(!Array.isArray(n))return c(t,"attachments","Expected an array."),[];n.length>k&&c(t,"attachments",`Choose ${k} attachments or fewer.`);const e=n.slice(0,k).map((o,i)=>Te(o,i,t)),r=new Set;return e.forEach((o,i)=>{const a=xe(o);r.has(a)&&c(t,`attachments.${i}`,"Duplicate attachment."),r.add(a)}),e}function Y(n,t){if(n==null)return;const e=v(n,"limits",t);s(e,"limits",Object.keys(D),t);const r={};return Object.keys(D).forEach(o=>{const i=e[o];if(i==null)return;const a=D[o];if(typeof i!="number"||!Number.isInteger(i)||i<a.min||i>a.max){c(t,`limits.${o}`,`Expected an integer between ${a.min} and ${a.max}.`);return}r[o]=i}),Object.keys(r).length>0?r:void 0}function V(n){if(n.length>0)throw new x(n)}function Z(n,t,e){n.type==="none"&&t.length===0&&c(e,"body","Add briefing instructions, a custom message, or at least one attachment.")}function F(n){const t=[],e=v(n,"jobConfig",t);s(e,"jobConfig",["kind","source","body","attachments","presentation","limits"],t),e.kind!==_&&c(t,"kind","Expected BRIEFING.");const r=U(e.source,t),o=H(e.body,t),i=W(e.attachments,t),a=J(e.presentation,t),d=Y(e.limits,t);return Z(o,i,t),V(t),{kind:_,source:r,body:o,attachments:i,presentation:a,...d?{limits:d}:{}}}function Ae(n){return F({...n,kind:_})}function z(n,t,e,r="deliveryConfig.recipients"){const o=`${r}.${t}`,i=v(n,o,e),a=i.type;if(a==="email"){s(i,o,["type","address","name"],e);const d=p(i.address,`${o}.address`,l.id,e),m=y(i.name,`${o}.name`,l.attachmentTitle,e);return d&&!ue(d)&&c(e,`${o}.address`,"Email address is invalid."),{type:"email",address:d,...m?{name:m}:{}}}return a==="user"?(s(i,o,["type","userId"],e),{type:"user",userId:p(i.userId,`${o}.userId`,l.id,e)}):a==="tenant_user"?(s(i,o,["type","tenantUserId"],e),{type:"tenant_user",tenantUserId:p(i.tenantUserId,`${o}.tenantUserId`,l.id,e)}):a==="group"?(s(i,o,["type","groupId"],e),{type:"group",groupId:p(i.groupId,`${o}.groupId`,l.id,e)}):(c(e,`${o}.type`,"Expected email, user, tenant_user, or group."),{type:"email",address:""})}function Se(n,t){return n==null?[]:Array.isArray(n)?n.map((e,r)=>z(e,r,t)):(c(t,"deliveryConfig.recipients","Expected an array."),[])}function ke(n,t){if(!Array.isArray(n))return c(t,"deliveryConfig.channels","Expected an array."),[];const e=[];return n.forEach((r,o)=>{if(!N(r)){c(t,`deliveryConfig.channels.${o}`,"Expected EMAIL, WEBHOOK, SLACK, IN_APP, or TELEGRAM.");return}e.includes(r)||e.push(r)}),e}function _e(n,t,e){if(n==null)return;const r=v(n,t,e),o={};return Object.entries(r).forEach(([i,a])=>{if(typeof a!="string"){c(e,`${t}.${i}`,"Expected a string.");return}o[i]=a.trim()}),Object.keys(o).length>0?o:void 0}function Be(n,t,e){if(n==null)return;const r=v(n,t,e);s(r,t,["url","method","headers","secretEncrypted"],e);const o=r.method===void 0||r.method===null?void 0:T(r.method,`${t}.method`,["POST","PUT"],e),i=_e(r.headers,`${t}.headers`,e),a=y(r.secretEncrypted,`${t}.secretEncrypted`,2e3,e);return{url:p(r.url,`${t}.url`,2e3,e),...o?{method:o}:{},...i?{headers:i}:{},...a?{secretEncrypted:a}:{}}}function Le(n,t,e){const r=v(n,t,e),o=r.type;if(o==="channel"){s(r,t,["type","channelId","channelName","isPrivate"],e);const i=y(r.channelName,`${t}.channelName`,l.attachmentTitle,e),a=r.isPrivate===void 0||r.isPrivate===null?void 0:C(r.isPrivate,!1,`${t}.isPrivate`,e);return{type:"channel",channelId:p(r.channelId,`${t}.channelId`,l.id,e),...i?{channelName:i}:{},...a!==void 0?{isPrivate:a}:{}}}return o==="dm"?(s(r,t,["type","recipient"],e),c(e,`${t}.type`,"Slack DM delivery is not supported in V1."),{type:"dm",recipient:z(r.recipient,0,e,`${t}.recipient`)}):(c(e,`${t}.type`,"Expected channel."),{type:"channel",channelId:""})}function Re(n,t,e){if(n==null)return;if(!Array.isArray(n)){c(e,t,"Expected an array.");return}const r=n.map((o,i)=>z(o,i,e,t));return r.length>0?r:void 0}function we(n,t,e){if(n==null)return;const r=v(n,t,e);s(r,t,["destination","threadMentions","postThreadDetail","includeDashboardLink","includeBriefingLink"],e);const o=Re(r.threadMentions,`${t}.threadMentions`,e),i=C(r.postThreadDetail,!0,`${t}.postThreadDetail`,e),a=C(r.includeDashboardLink,!0,`${t}.includeDashboardLink`,e),d=C(r.includeBriefingLink,!0,`${t}.includeBriefingLink`,e);return{destination:Le(r.destination,`${t}.destination`,e),...o?{threadMentions:o}:{},...r.postThreadDetail!==void 0?{postThreadDetail:i}:{},...r.includeDashboardLink!==void 0?{includeDashboardLink:a}:{},...r.includeBriefingLink!==void 0?{includeBriefingLink:d}:{}}}function De(n,t,e){const r=v(n,t,e);s(r,t,["subjectOverride","titleOverride","summaryOverride","actionBlockVisible","formatProfile","slackConfig","webhookConfig"],e);const o=E(r.formatProfile,`${t}.formatProfile`,ae,"concise, balanced, or detailed",e),i=y(r.subjectOverride,`${t}.subjectOverride`,500,e),a=y(r.titleOverride,`${t}.titleOverride`,500,e),d=y(r.summaryOverride,`${t}.summaryOverride`,2e3,e),m=C(r.actionBlockVisible,!0,`${t}.actionBlockVisible`,e),f=Be(r.webhookConfig,`${t}.webhookConfig`,e),u=we(r.slackConfig,`${t}.slackConfig`,e);return{...o?{formatProfile:o}:{},...i?{subjectOverride:i}:{},...a?{titleOverride:a}:{},...d?{summaryOverride:d}:{},...r.actionBlockVisible!==void 0?{actionBlockVisible:m}:{},...u?{slackConfig:u}:{},...f?{webhookConfig:f}:{}}}function Ve(n,t){if(n==null)return;const e=v(n,"deliveryConfig.channelConfigs",t),r={};return Object.entries(e).forEach(([o,i])=>{if(!N(o)){c(t,`deliveryConfig.channelConfigs.${o}`,"Expected a supported delivery channel.");return}r[o]=De(i,`deliveryConfig.channelConfigs.${o}`,t)}),Object.keys(r).length>0?r:void 0}function Fe(n,t){var m,f,u;if(n==null)return null;const e=v(n,"deliveryConfig",t);s(e,"deliveryConfig",["recipients","channels","channelConfigs"],t);const r=Ve(e.channelConfigs,t),o=Se(e.recipients,t),i=ke(e.channels,t),a=((f=(m=r==null?void 0:r.SLACK)==null?void 0:m.slackConfig)==null?void 0:f.destination.type)==="channel"&&!!r.SLACK.slackConfig.destination.channelId.trim();return i.some(I=>I!=="SLACK")&&o.length===0&&c(t,"deliveryConfig.recipients","Add at least one recipient or remove delivery config."),i.length===0&&c(t,"deliveryConfig.channels","Choose at least one delivery channel or remove delivery config."),i.includes("SLACK")&&!a&&c(t,"deliveryConfig.channelConfigs.SLACK.slackConfig.destination.channelId","Choose a Slack channel destination."),!i.includes("SLACK")&&((u=r==null?void 0:r.SLACK)!=null&&u.slackConfig)&&c(t,"deliveryConfig.channelConfigs.SLACK","Slack config requires SLACK in deliveryConfig.channels."),{recipients:o,channels:i,...r?{channelConfigs:r}:{}}}function L(n){const t=[],e=v(n,"draft",t);s(e,"draft",["name","description","status","scheduleExpr","timezone","source","body","attachments","presentation","limits","deliveryConfig"],t);const r=p(e.name,"name",l.name,t),o=y(e.description,"description",l.description,t)??null,i=y(e.scheduleExpr,"scheduleExpr",500,t)??null,a=y(e.timezone,"timezone",200,t)??"UTC",d=me(e.status,t),m=U(e.source,t),f=H(e.body,t),u=W(e.attachments,t),I=J(e.presentation,t),b=Y(e.limits,t),h=Fe(e.deliveryConfig,t);return Z(f,u,t),V(t),{name:r,description:o,status:d,scheduleExpr:i,timezone:a,source:m,body:f,attachments:u,presentation:I,...b?{limits:b}:{},deliveryConfig:h}}function ze(n){return L(n)}function Ne(n){return L(n)}function Oe(n){try{return{valid:!0,value:L(n),issues:[]}}catch(t){if(t instanceof x)return{valid:!1,issues:t.issues};throw t}}function Me(n){try{return{valid:!0,value:F(n),issues:[]}}catch(t){if(t instanceof x)return{valid:!1,issues:t.issues};throw t}}function Pe(n){return typeof n=="string"&&q.has(n)}function N(n){return typeof n=="string"&&te.has(n)}exports.BRIEFING_ARTIFACT_FORMATS=K;exports.BRIEFING_CONTENT_LIMITS=g;exports.BRIEFING_KIND=_;exports.BRIEFING_TEXT_LIMITS=l;exports.BriefingContractError=x;exports.DEFAULT_BRIEFING_ARTIFACT_FORMATS=B;exports.MAX_BRIEFING_ATTACHMENTS=k;exports.buildBriefingJobConfig=Ae;exports.buildCreateBriefingRequest=ze;exports.buildUpdateBriefingRequest=Ne;exports.isBriefingArtifactFormat=Pe;exports.isBriefingDeliveryChannel=N;exports.normalizeBriefingContentDocument=X;exports.normalizeBriefingDraft=L;exports.normalizeBriefingJobConfig=F;exports.validateBriefingContentDocument=be;exports.validateBriefingDraft=Oe;exports.validateBriefingJobConfig=Me;
1
+ "use strict";var Q=Object.defineProperty;var ee=(r,t,e)=>t in r?Q(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e;var q=(r,t,e)=>ee(r,typeof t!="symbol"?t+"":t,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const _="BRIEFING",j=["markdown","html"],B=["markdown"],k=20,l={name:500,description:2e3,instruction:5e4,customMessage:5e4,contentTitle:500,contentSummary:2e4,contentText:5e3,contentSql:5e4,contentItem:2e3,contentCell:500,attachmentTitle:500,presentationAudience:1e3,presentationTone:500,presentationFormat:2e3,id:500},g={maxBlocks:50,maxTableRows:100,maxTableColumns:20,maxTableCellCharacters:l.contentCell,maxParagraphCharacters:l.contentText,maxFindingCharacters:l.contentText,maxListItems:100,maxKpiTiles:8},K=new Set(j),te=new Set(["EMAIL","WEBHOOK","SLACK","IN_APP","TELEGRAM"]),D={maxToolCalls:{min:1,max:100},maxRows:{min:1,max:1e5},timeoutMs:{min:1e3,max:30*6e4}},ne=new Set(["letter","legal","a4","a3","tabloid"]),re=new Set(["portrait","landscape"]),oe=new Set([",",";"," "]),ie=new Set(["current","all"]),ae=new Set(["concise","balanced","detailed"]),ce=new Set(["info","positive","warning","critical"]),de=new Set(["text","number","currency","percent","date","boolean"]),le=new Set(["left","center","right"]),fe=["pageSize","orientation","includeFilters","includeTimestamp","delimiter","includeHeaders","useFormattedValues","sheetSelection","currentSheetId","currentSheetName","filterValues","inlineFilterValues","sheetFilterValues","filterLine","controlValues","controlDefinitions","cardControlDefinitions","controlBindings","tablePreferences","dashboardInputExecutionSnapshot","selectedSheetId","cardType","theme"];class x extends Error{constructor(e){super(e.map(n=>`${n.field}: ${n.message}`).join("; "));q(this,"issues");this.name="BriefingContractError",this.issues=e}}function G(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function c(r,t,e){r.push({field:t,message:e})}function h(r,t,e){return G(r)?r:(c(e,t,"Expected an object."),{})}function m(r,t,e,n){const o=new Set(e);Object.keys(r).forEach(i=>{o.has(i)||c(n,t?`${t}.${i}`:i,`Unexpected field "${i}".`)})}function u(r,t,e,n){if(typeof r!="string")return c(n,t,"Expected a string."),"";const o=r.trim();return o?(o.length>e&&c(n,t,`Must be ${e} characters or fewer.`),o):(c(n,t,"Required value cannot be empty."),"")}function y(r,t,e,n){if(r==null)return;if(typeof r!="string"){c(n,t,"Expected a string.");return}const o=r.trim();if(o)return o.length>e&&c(n,t,`Must be ${e} characters or fewer.`),o}function se(r,t,e){if(r!=null){if(!Number.isInteger(r)||Number(r)<0){c(e,t,"Expected a non-negative integer.");return}return Number(r)}}function $(r,t,e,n={}){if(r==null)return n.required?(c(e,t,"Expected at least one evidence id."),[]):void 0;if(!Array.isArray(r))return c(e,t,"Expected an array."),n.required?[]:void 0;const o=[];return r.forEach((i,a)=>{const d=u(i,`${t}.${a}`,l.id,e);d&&!o.includes(d)&&o.push(d)}),n.required&&o.length===0&&c(e,t,"Expected at least one evidence id."),o.length>0||n.required?o:void 0}function C(r,t,e,n){return r==null?t:typeof r!="boolean"?(c(n,e,"Expected a boolean."),t):r}function me(r,t){return r==null?"ACTIVE":r==="ACTIVE"||r==="PAUSED"||r==="DISABLED"?r:(c(t,"status","Expected ACTIVE, PAUSED, or DISABLED."),"ACTIVE")}function pe(r){return r.includes("@")&&r.includes(".")&&!r.includes(" ")}function U(r,t){if(r==null)return{type:"project"};const e=h(r,"source",t),n=e.type;return n==="project"?(m(e,"source",["type"],t),{type:"project"}):n==="dashboard"?(m(e,"source",["type","dashboardId"],t),{type:"dashboard",dashboardId:u(e.dashboardId,"source.dashboardId",l.id,t)}):(c(t,"source.type","Expected project or dashboard."),{type:"project"})}function H(r,t){const e=h(r,"body",t),n=e.type;return n==="generated_analysis"?(m(e,"body",["type","instruction"],t),{type:"generated_analysis",instruction:u(e.instruction,"body.instruction",l.instruction,t)}):n==="custom_message"?(m(e,"body",["type","message"],t),{type:"custom_message",message:u(e.message,"body.message",l.customMessage,t)}):n==="none"?(m(e,"body",["type"],t),{type:"none"}):(c(t,"body.type","Expected generated_analysis, custom_message, or none."),{type:"none"})}function ue(r,t){if(r==null)return[...B];if(!Array.isArray(r))return c(t,"presentation.artifactFormats","Expected an array."),[...B];if(r.length===0)return c(t,"presentation.artifactFormats","Choose at least one artifact format."),[];const e=[];return r.forEach((n,o)=>{if(typeof n!="string"||!K.has(n)){c(t,`presentation.artifactFormats.${o}`,"Expected markdown or html.");return}e.includes(n)||e.push(n)}),e}function J(r,t){if(r==null)return{artifactFormats:[...B],includeEvidence:!0,includeSql:!0};const e=h(r,"presentation",t);m(e,"presentation",["artifactFormats","includeEvidence","includeSql","audience","tone","format"],t);const n={artifactFormats:ue(e.artifactFormats,t),includeEvidence:C(e.includeEvidence,!0,"presentation.includeEvidence",t),includeSql:C(e.includeSql,!0,"presentation.includeSql",t)},o=y(e.audience,"presentation.audience",l.presentationAudience,t),i=y(e.tone,"presentation.tone",l.presentationTone,t),a=y(e.format,"presentation.format",l.presentationFormat,t);return o&&(n.audience=o),i&&(n.tone=i),a&&(n.format=a),n}function ye(r,t,e){return Array.isArray(r)?(r.length===0&&c(e,t,"Expected at least one item."),r.length>g.maxListItems&&c(e,t,`Must have ${g.maxListItems} items or fewer.`),r.slice(0,g.maxListItems).map((n,o)=>u(n,`${t}.${o}`,l.contentItem,e)).filter(Boolean)):(c(e,t,"Expected an array."),[])}function ve(r,t,e){return r===null||typeof r=="string"||typeof r=="number"||typeof r=="boolean"?typeof r=="string"&&r.length>l.contentCell?(c(e,t,`Must be ${l.contentCell} characters or fewer.`),r.slice(0,l.contentCell)):typeof r=="number"&&!Number.isFinite(r)?(c(e,t,"Expected a finite number."),null):r:(c(e,t,"Expected a string, number, boolean, or null."),null)}function he(r,t,e){if(!Array.isArray(r))return c(e,t,"Expected an array."),[];r.length===0&&c(e,t,"Expected at least one column."),r.length>g.maxTableColumns&&c(e,t,`Must have ${g.maxTableColumns} columns or fewer.`);const n=new Set;return r.slice(0,g.maxTableColumns).map((o,i)=>{const a=`${t}.${i}`,d=h(o,a,e);m(d,a,["key","label","kind","align"],e);const s=u(d.key,`${a}.key`,l.id,e);s&&(n.has(s)&&c(e,`${a}.key`,"Column key must be unique."),n.add(s));const f=u(d.label,`${a}.label`,l.contentTitle,e),p=E(d.kind,`${a}.kind`,de,"text, number, currency, percent, date, or boolean",e),I=E(d.align,`${a}.align`,le,"left, center, or right",e);return{key:s,label:f,...p?{kind:p}:{},...I?{align:I}:{}}})}function ge(r,t,e,n){if(!Array.isArray(r))return c(n,t,"Expected an array."),[];r.length>g.maxTableRows&&c(n,t,`Must have ${g.maxTableRows} rows or fewer.`);const o=new Set(e.map(i=>i.key).filter(Boolean));return r.slice(0,g.maxTableRows).map((i,a)=>{const d=`${t}.${a}`,s=h(i,d,n);return Object.keys(s).forEach(f=>{o.has(f)||c(n,`${d}.${f}`,`Unexpected table cell "${f}".`)}),Object.fromEntries(e.map(f=>[f.key,ve(s[f.key]??null,`${d}.${f.key}`,n)]))})}function Ie(r,t,e){const n=`content.blocks.${t}`,o=h(r,n,e),i=o.type;if(i==="heading"){m(o,n,["type","text","level","evidenceIds"],e);const a=o.level===void 0||o.level===null?void 0:o.level===2||o.level===3?o.level:void 0;o.level!==void 0&&o.level!==null&&a===void 0&&c(e,`${n}.level`,"Expected 2 or 3.");const d=$(o.evidenceIds,`${n}.evidenceIds`,e);return{type:"heading",text:u(o.text,`${n}.text`,l.contentTitle,e),...a?{level:a}:{},...d?{evidenceIds:d}:{}}}if(i==="paragraph"){m(o,n,["type","text","evidenceIds"],e);const a=$(o.evidenceIds,`${n}.evidenceIds`,e);return{type:"paragraph",text:u(o.text,`${n}.text`,l.contentText,e),...a?{evidenceIds:a}:{}}}if(i==="finding"){m(o,n,["type","title","text","severity","evidenceIds"],e);const a=y(o.title,`${n}.title`,l.contentTitle,e),d=E(o.severity,`${n}.severity`,ce,"info, positive, warning, or critical",e);return{type:"finding",...a?{title:a}:{},text:u(o.text,`${n}.text`,l.contentText,e),...d?{severity:d}:{},evidenceIds:$(o.evidenceIds,`${n}.evidenceIds`,e,{required:!0})??[]}}if(i==="bullets"||i==="actions"||i==="limitations"){m(o,n,["type","title","items","evidenceIds"],e);const a=y(o.title,`${n}.title`,l.contentTitle,e),d=$(o.evidenceIds,`${n}.evidenceIds`,e);return{type:i,...a?{title:a}:{},items:ye(o.items,`${n}.items`,e),...d?{evidenceIds:d}:{}}}if(i==="metric"){m(o,n,["type","label","value","previousValue","delta","unit","evidenceIds"],e);const a=typeof o.value=="string"||typeof o.value=="number"?o.value:"";a===""&&c(e,`${n}.value`,"Expected a string or number.");const d=o.previousValue===void 0||o.previousValue===null||typeof o.previousValue=="string"||typeof o.previousValue=="number"?o.previousValue:void 0;o.previousValue!==void 0&&o.previousValue!==null&&d===void 0&&c(e,`${n}.previousValue`,"Expected a string, number, or null.");const s=o.delta===void 0||o.delta===null||typeof o.delta=="string"||typeof o.delta=="number"?o.delta:void 0;o.delta!==void 0&&o.delta!==null&&s===void 0&&c(e,`${n}.delta`,"Expected a string, number, or null.");const f=y(o.unit,`${n}.unit`,l.contentTitle,e),p=$(o.evidenceIds,`${n}.evidenceIds`,e);return{type:"metric",label:u(o.label,`${n}.label`,l.contentTitle,e),value:a,...d!==void 0?{previousValue:d}:{},...s!==void 0?{delta:s}:{},...f?{unit:f}:{},...p?{evidenceIds:p}:{}}}if(i==="kpi_grid"){m(o,n,["type","title","tiles","evidenceIds"],e);const a=y(o.title,`${n}.title`,l.contentTitle,e),d=Array.isArray(o.tiles)?o.tiles:[];Array.isArray(o.tiles)||c(e,`${n}.tiles`,"Expected an array."),d.length===0&&c(e,`${n}.tiles`,"Expected at least one tile."),d.length>g.maxKpiTiles&&c(e,`${n}.tiles`,`Must have ${g.maxKpiTiles} tiles or fewer.`);const s=d.slice(0,g.maxKpiTiles).map((p,I)=>{const b=`${n}.tiles.${I}`,v=h(p,b,e);m(v,b,["label","value","previousValue","delta","unit","evidenceIds"],e);const O=typeof v.value=="string"||typeof v.value=="number"?v.value:"";O===""&&c(e,`${b}.value`,"Expected a string or number.");const R=v.previousValue===void 0||v.previousValue===null||typeof v.previousValue=="string"||typeof v.previousValue=="number"?v.previousValue:void 0;v.previousValue!==void 0&&v.previousValue!==null&&R===void 0&&c(e,`${b}.previousValue`,"Expected a string, number, or null.");const w=v.delta===void 0||v.delta===null||typeof v.delta=="string"||typeof v.delta=="number"?v.delta:void 0;v.delta!==void 0&&v.delta!==null&&w===void 0&&c(e,`${b}.delta`,"Expected a string, number, or null.");const M=y(v.unit,`${b}.unit`,l.contentTitle,e),P=$(v.evidenceIds,`${b}.evidenceIds`,e);return{label:u(v.label,`${b}.label`,l.contentTitle,e),value:O,...R!==void 0?{previousValue:R}:{},...w!==void 0?{delta:w}:{},...M?{unit:M}:{},...P?{evidenceIds:P}:{}}}),f=$(o.evidenceIds,`${n}.evidenceIds`,e);return{type:"kpi_grid",...a?{title:a}:{},tiles:s,...f?{evidenceIds:f}:{}}}if(i==="progress"){m(o,n,["type","label","value","detail","evidenceIds"],e);const a=typeof o.value=="number"&&Number.isFinite(o.value)?o.value:0;(typeof o.value!="number"||!Number.isFinite(o.value))&&c(e,`${n}.value`,"Expected a finite number.");const d=y(o.detail,`${n}.detail`,l.contentText,e),s=$(o.evidenceIds,`${n}.evidenceIds`,e);return{type:"progress",label:u(o.label,`${n}.label`,l.contentTitle,e),value:a,...d?{detail:d}:{},...s?{evidenceIds:s}:{}}}if(i==="table"){m(o,n,["type","id","title","columns","rows","caption","totalRows","evidenceIds"],e);const a=he(o.columns,`${n}.columns`,e),d=y(o.title,`${n}.title`,l.contentTitle,e),s=y(o.id,`${n}.id`,l.id,e),f=y(o.caption,`${n}.caption`,l.contentItem,e),p=se(o.totalRows,`${n}.totalRows`,e),I=$(o.evidenceIds,`${n}.evidenceIds`,e);return{type:"table",...s?{id:s}:{},...d?{title:d}:{},columns:a,rows:ge(o.rows,`${n}.rows`,a,e),...f?{caption:f}:{},...p!==void 0?{totalRows:p}:{},...I?{evidenceIds:I}:{}}}if(i==="evidence_appendix"){m(o,n,["type","title","evidenceIds"],e);const a=y(o.title,`${n}.title`,l.contentTitle,e);return{type:"evidence_appendix",...a?{title:a}:{},evidenceIds:$(o.evidenceIds,`${n}.evidenceIds`,e,{required:!0})??[]}}if(i==="sql"){m(o,n,["type","title","sql","evidenceIds"],e);const a=y(o.title,`${n}.title`,l.contentTitle,e),d=u(o.sql,`${n}.sql`,l.contentSql,e),s=$(o.evidenceIds,`${n}.evidenceIds`,e);return{type:"sql",...a?{title:a}:{},sql:d,...s?{evidenceIds:s}:{}}}return c(e,`${n}.type`,"Expected heading, paragraph, finding, bullets, metric, kpi_grid, progress, table, actions, limitations, sql, or evidence_appendix."),{type:"paragraph",text:""}}function X(r){const t=[],e=h(r,"content",t);m(e,"content",["version","title","summary","blocks"],t),e.version!==1&&c(t,"content.version","Expected version 1.");const n=y(e.title,"content.title",l.contentTitle,t),o=y(e.summary,"content.summary",l.contentSummary,t);Array.isArray(e.blocks)||c(t,"content.blocks","Expected an array.");const i=Array.isArray(e.blocks)?e.blocks:[];i.length===0&&c(t,"content.blocks","Expected at least one block."),i.length>g.maxBlocks&&c(t,"content.blocks",`Must have ${g.maxBlocks} blocks or fewer.`);const a=i.slice(0,g.maxBlocks).map((d,s)=>Ie(d,s,t));return F(t),{version:1,...n?{title:n}:{},...o?{summary:o}:{},blocks:a}}function be(r){try{return{valid:!0,value:X(r),issues:[]}}catch(t){if(t instanceof x)return{valid:!1,issues:t.issues};throw t}}function T(r,t,e,n){return typeof r=="string"&&e.includes(r)?r:(c(n,t,`Expected ${e.join(" or ")}.`),e[0])}function E(r,t,e,n,o){if(r!=null){if(typeof r=="string"&&e.has(r))return r;c(o,t,`Expected ${n}.`)}}function $e(r,t,e){if(r!=null){if(!Array.isArray(r)){c(e,t,"Expected an array.");return}return r}}function Ee(r,t,e){if(r!=null){if(!G(r)){c(e,t,"Expected an object.");return}return r}}function Ce(r,t,e){if(r==null)return;const n=h(r,t,e);m(n,t,fe,e);const o={},i=E(n.pageSize,`${t}.pageSize`,ne,"letter, legal, a4, a3, or tabloid",e),a=E(n.orientation,`${t}.orientation`,re,"portrait or landscape",e),d=E(n.delimiter,`${t}.delimiter`,oe,"comma, semicolon, or tab",e),s=E(n.sheetSelection,`${t}.sheetSelection`,ie,"current or all",e);i&&(o.pageSize=i),a&&(o.orientation=a),d&&(o.delimiter=d),s&&(o.sheetSelection=s);for(const f of["includeFilters","includeTimestamp","includeHeaders","useFormattedValues"])if(!(n[f]===void 0||n[f]===null)){if(typeof n[f]!="boolean"){c(e,`${t}.${f}`,"Expected a boolean.");continue}o[f]=n[f]}for(const f of["currentSheetId","currentSheetName","filterLine","selectedSheetId","cardType","theme"]){const p=y(n[f],`${t}.${f}`,l.id,e);p&&(o[f]=p)}for(const f of["filterValues","inlineFilterValues","sheetFilterValues","controlDefinitions","cardControlDefinitions","controlBindings"]){const p=$e(n[f],`${t}.${f}`,e);p&&(o[f]=p)}for(const f of["controlValues","tablePreferences","dashboardInputExecutionSnapshot"]){const p=Ee(n[f],`${t}.${f}`,e);p&&(o[f]=p)}return Object.keys(o).length>0?o:void 0}function A(r,t,e,n){const o=y(t,e,l.attachmentTitle,n);return o&&(r.title=o),r}function S(r,t,e,n){const o=Ce(t,e,n);return o&&(r.settings=o),r}function Te(r,t,e){const n=`attachments.${t}`,o=h(r,n,e),i=o.type;if(i==="dashboard"){m(o,n,["type","dashboardId","format","title","settings"],e);const a=A({type:"dashboard",dashboardId:u(o.dashboardId,`${n}.dashboardId`,l.id,e),format:T(o.format,`${n}.format`,["pdf"],e)},o.title,`${n}.title`,e);return S(a,o.settings,`${n}.settings`,e)}if(i==="dashboard_sheet"||i==="document_sheet"){m(o,n,["type","dashboardId","sheetId","format","title","settings"],e);const a=A({type:i,dashboardId:u(o.dashboardId,`${n}.dashboardId`,l.id,e),sheetId:u(o.sheetId,`${n}.sheetId`,l.id,e),format:T(o.format,`${n}.format`,["pdf"],e)},o.title,`${n}.title`,e);return S(a,o.settings,`${n}.settings`,e)}if(i==="visual"){m(o,n,["type","dashboardId","visualId","format","title","settings"],e);const a=A({type:"visual",dashboardId:u(o.dashboardId,`${n}.dashboardId`,l.id,e),visualId:u(o.visualId,`${n}.visualId`,l.id,e),format:T(o.format,`${n}.format`,["pdf","png"],e)},o.title,`${n}.title`,e);return S(a,o.settings,`${n}.settings`,e)}if(i==="card"){m(o,n,["type","dashboardId","cardId","format","title","settings"],e);const a=A({type:"card",dashboardId:u(o.dashboardId,`${n}.dashboardId`,l.id,e),cardId:u(o.cardId,`${n}.cardId`,l.id,e),format:T(o.format,`${n}.format`,["csv","pdf","png"],e)},o.title,`${n}.title`,e);return S(a,o.settings,`${n}.settings`,e)}return c(e,`${n}.type`,"Expected dashboard, dashboard_sheet, document_sheet, visual, or card."),{type:"dashboard",dashboardId:"",format:"pdf"}}function xe(r){switch(r.type){case"dashboard":return`${r.type}:${r.dashboardId}:${r.format}`;case"dashboard_sheet":case"document_sheet":return`${r.type}:${r.dashboardId}:${r.sheetId}:${r.format}`;case"visual":return`${r.type}:${r.dashboardId}:${r.visualId}:${r.format}`;case"card":return`${r.type}:${r.dashboardId}:${r.cardId}:${r.format}`}}function W(r,t){if(r==null)return[];if(!Array.isArray(r))return c(t,"attachments","Expected an array."),[];r.length>k&&c(t,"attachments",`Choose ${k} attachments or fewer.`);const e=r.slice(0,k).map((o,i)=>Te(o,i,t)),n=new Set;return e.forEach((o,i)=>{const a=xe(o);n.has(a)&&c(t,`attachments.${i}`,"Duplicate attachment."),n.add(a)}),e}function Y(r,t){if(r==null)return;const e=h(r,"limits",t);m(e,"limits",Object.keys(D),t);const n={};return Object.keys(D).forEach(o=>{const i=e[o];if(i==null)return;const a=D[o];if(typeof i!="number"||!Number.isInteger(i)||i<a.min||i>a.max){c(t,`limits.${o}`,`Expected an integer between ${a.min} and ${a.max}.`);return}n[o]=i}),Object.keys(n).length>0?n:void 0}function F(r){if(r.length>0)throw new x(r)}function Z(r,t,e){r.type==="none"&&t.length===0&&c(e,"body","Add briefing instructions, a custom message, or at least one attachment.")}function V(r){const t=[],e=h(r,"jobConfig",t);m(e,"jobConfig",["kind","source","body","attachments","presentation","limits"],t),e.kind!==_&&c(t,"kind","Expected BRIEFING.");const n=U(e.source,t),o=H(e.body,t),i=W(e.attachments,t),a=J(e.presentation,t),d=Y(e.limits,t);return Z(o,i,t),F(t),{kind:_,source:n,body:o,attachments:i,presentation:a,...d?{limits:d}:{}}}function Ae(r){return V({...r,kind:_})}function N(r,t,e,n="deliveryConfig.recipients"){const o=`${n}.${t}`,i=h(r,o,e),a=i.type;if(a==="email"){m(i,o,["type","address","name"],e);const d=u(i.address,`${o}.address`,l.id,e),s=y(i.name,`${o}.name`,l.attachmentTitle,e);return d&&!pe(d)&&c(e,`${o}.address`,"Email address is invalid."),{type:"email",address:d,...s?{name:s}:{}}}return a==="user"?(m(i,o,["type","userId"],e),{type:"user",userId:u(i.userId,`${o}.userId`,l.id,e)}):a==="tenant_user"?(m(i,o,["type","tenantUserId"],e),{type:"tenant_user",tenantUserId:u(i.tenantUserId,`${o}.tenantUserId`,l.id,e)}):a==="group"?(m(i,o,["type","groupId"],e),{type:"group",groupId:u(i.groupId,`${o}.groupId`,l.id,e)}):(c(e,`${o}.type`,"Expected email, user, tenant_user, or group."),{type:"email",address:""})}function Se(r,t){return r==null?[]:Array.isArray(r)?r.map((e,n)=>N(e,n,t)):(c(t,"deliveryConfig.recipients","Expected an array."),[])}function ke(r,t){if(!Array.isArray(r))return c(t,"deliveryConfig.channels","Expected an array."),[];const e=[];return r.forEach((n,o)=>{if(!z(n)){c(t,`deliveryConfig.channels.${o}`,"Expected EMAIL, WEBHOOK, SLACK, IN_APP, or TELEGRAM.");return}e.includes(n)||e.push(n)}),e}function _e(r,t,e){if(r==null)return;const n=h(r,t,e),o={};return Object.entries(n).forEach(([i,a])=>{if(typeof a!="string"){c(e,`${t}.${i}`,"Expected a string.");return}o[i]=a.trim()}),Object.keys(o).length>0?o:void 0}function Be(r,t,e){if(r==null)return;const n=h(r,t,e);m(n,t,["url","method","headers","secretEncrypted"],e);const o=n.method===void 0||n.method===null?void 0:T(n.method,`${t}.method`,["POST","PUT"],e),i=_e(n.headers,`${t}.headers`,e),a=y(n.secretEncrypted,`${t}.secretEncrypted`,2e3,e);return{url:u(n.url,`${t}.url`,2e3,e),...o?{method:o}:{},...i?{headers:i}:{},...a?{secretEncrypted:a}:{}}}function Le(r,t,e){const n=h(r,t,e),o=n.type;if(o==="channel"){m(n,t,["type","channelId","channelName","isPrivate"],e);const i=y(n.channelName,`${t}.channelName`,l.attachmentTitle,e),a=n.isPrivate===void 0||n.isPrivate===null?void 0:C(n.isPrivate,!1,`${t}.isPrivate`,e);return{type:"channel",channelId:u(n.channelId,`${t}.channelId`,l.id,e),...i?{channelName:i}:{},...a!==void 0?{isPrivate:a}:{}}}return o==="dm"?(m(n,t,["type","recipient"],e),c(e,`${t}.type`,"Slack DM delivery is not supported in V1."),{type:"dm",recipient:N(n.recipient,0,e,`${t}.recipient`)}):(c(e,`${t}.type`,"Expected channel."),{type:"channel",channelId:""})}function Re(r,t,e){if(r==null)return;if(!Array.isArray(r)){c(e,t,"Expected an array.");return}const n=r.map((o,i)=>N(o,i,e,t));return n.length>0?n:void 0}function we(r,t,e){if(r==null)return;const n=h(r,t,e);m(n,t,["destination","threadMentions","postThreadDetail","includeDashboardLink","includeBriefingLink"],e);const o=Re(n.threadMentions,`${t}.threadMentions`,e),i=C(n.postThreadDetail,!0,`${t}.postThreadDetail`,e),a=C(n.includeDashboardLink,!0,`${t}.includeDashboardLink`,e),d=C(n.includeBriefingLink,!0,`${t}.includeBriefingLink`,e);return{destination:Le(n.destination,`${t}.destination`,e),...o?{threadMentions:o}:{},...n.postThreadDetail!==void 0?{postThreadDetail:i}:{},...n.includeDashboardLink!==void 0?{includeDashboardLink:a}:{},...n.includeBriefingLink!==void 0?{includeBriefingLink:d}:{}}}function De(r,t,e){const n=h(r,t,e);m(n,t,["subjectOverride","titleOverride","summaryOverride","actionBlockVisible","formatProfile","slackConfig","webhookConfig"],e);const o=E(n.formatProfile,`${t}.formatProfile`,ae,"concise, balanced, or detailed",e),i=y(n.subjectOverride,`${t}.subjectOverride`,500,e),a=y(n.titleOverride,`${t}.titleOverride`,500,e),d=y(n.summaryOverride,`${t}.summaryOverride`,2e3,e),s=C(n.actionBlockVisible,!0,`${t}.actionBlockVisible`,e),f=Be(n.webhookConfig,`${t}.webhookConfig`,e),p=we(n.slackConfig,`${t}.slackConfig`,e);return{...o?{formatProfile:o}:{},...i?{subjectOverride:i}:{},...a?{titleOverride:a}:{},...d?{summaryOverride:d}:{},...n.actionBlockVisible!==void 0?{actionBlockVisible:s}:{},...p?{slackConfig:p}:{},...f?{webhookConfig:f}:{}}}function Fe(r,t){if(r==null)return;const e=h(r,"deliveryConfig.channelConfigs",t),n={};return Object.entries(e).forEach(([o,i])=>{if(!z(o)){c(t,`deliveryConfig.channelConfigs.${o}`,"Expected a supported delivery channel.");return}n[o]=De(i,`deliveryConfig.channelConfigs.${o}`,t)}),Object.keys(n).length>0?n:void 0}function Ve(r,t){var s,f,p;if(r==null)return null;const e=h(r,"deliveryConfig",t);m(e,"deliveryConfig",["recipients","channels","channelConfigs"],t);const n=Fe(e.channelConfigs,t),o=Se(e.recipients,t),i=ke(e.channels,t),a=((f=(s=n==null?void 0:n.SLACK)==null?void 0:s.slackConfig)==null?void 0:f.destination.type)==="channel"&&!!n.SLACK.slackConfig.destination.channelId.trim();return i.some(I=>I!=="SLACK")&&o.length===0&&c(t,"deliveryConfig.recipients","Add at least one recipient or remove delivery config."),i.length===0&&c(t,"deliveryConfig.channels","Choose at least one delivery channel or remove delivery config."),i.includes("SLACK")&&!a&&c(t,"deliveryConfig.channelConfigs.SLACK.slackConfig.destination.channelId","Choose a Slack channel destination."),!i.includes("SLACK")&&((p=n==null?void 0:n.SLACK)!=null&&p.slackConfig)&&c(t,"deliveryConfig.channelConfigs.SLACK","Slack config requires SLACK in deliveryConfig.channels."),{recipients:o,channels:i,...n?{channelConfigs:n}:{}}}function L(r){const t=[],e=h(r,"draft",t);m(e,"draft",["name","description","status","scheduleExpr","timezone","source","body","attachments","presentation","limits","deliveryConfig"],t);const n=u(e.name,"name",l.name,t),o=y(e.description,"description",l.description,t)??null,i=y(e.scheduleExpr,"scheduleExpr",500,t)??null,a=y(e.timezone,"timezone",200,t)??"UTC",d=me(e.status,t),s=U(e.source,t),f=H(e.body,t),p=W(e.attachments,t),I=J(e.presentation,t),b=Y(e.limits,t),v=Ve(e.deliveryConfig,t);return Z(f,p,t),F(t),{name:n,description:o,status:d,scheduleExpr:i,timezone:a,source:s,body:f,attachments:p,presentation:I,...b?{limits:b}:{},deliveryConfig:v}}function Ne(r){return L(r)}function ze(r){return L(r)}function Oe(r){try{return{valid:!0,value:L(r),issues:[]}}catch(t){if(t instanceof x)return{valid:!1,issues:t.issues};throw t}}function Me(r){try{return{valid:!0,value:V(r),issues:[]}}catch(t){if(t instanceof x)return{valid:!1,issues:t.issues};throw t}}function Pe(r){return typeof r=="string"&&K.has(r)}function z(r){return typeof r=="string"&&te.has(r)}exports.BRIEFING_ARTIFACT_FORMATS=j;exports.BRIEFING_CONTENT_LIMITS=g;exports.BRIEFING_KIND=_;exports.BRIEFING_TEXT_LIMITS=l;exports.BriefingContractError=x;exports.DEFAULT_BRIEFING_ARTIFACT_FORMATS=B;exports.MAX_BRIEFING_ATTACHMENTS=k;exports.buildBriefingJobConfig=Ae;exports.buildCreateBriefingRequest=Ne;exports.buildUpdateBriefingRequest=ze;exports.isBriefingArtifactFormat=Pe;exports.isBriefingDeliveryChannel=z;exports.normalizeBriefingContentDocument=X;exports.normalizeBriefingDraft=L;exports.normalizeBriefingJobConfig=V;exports.validateBriefingContentDocument=be;exports.validateBriefingDraft=Oe;exports.validateBriefingJobConfig=Me;