@hypequery/datasets 0.13.5 → 0.14.0

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 (113) hide show
  1. package/README.md +10 -0
  2. package/dist/agent-catalog.d.ts +97 -0
  3. package/dist/agent-catalog.d.ts.map +1 -0
  4. package/dist/agent-catalog.js +79 -0
  5. package/dist/api.type-test.js +19 -1
  6. package/dist/catalog.d.ts +17 -6
  7. package/dist/catalog.d.ts.map +1 -1
  8. package/dist/catalog.js +18 -1
  9. package/dist/contract.d.ts +11 -7
  10. package/dist/contract.d.ts.map +1 -1
  11. package/dist/contract.js +22 -1
  12. package/dist/dataset-query.d.ts.map +1 -1
  13. package/dist/dataset-query.js +9 -3
  14. package/dist/dataset.d.ts.map +1 -1
  15. package/dist/dataset.js +19 -2
  16. package/dist/executor.d.ts +6 -0
  17. package/dist/executor.d.ts.map +1 -1
  18. package/dist/executor.js +83 -24
  19. package/dist/field.d.ts.map +1 -1
  20. package/dist/field.js +2 -0
  21. package/dist/in-memory-backend.d.ts.map +1 -1
  22. package/dist/in-memory-backend.js +2 -17
  23. package/dist/index.d.ts +10 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +7 -0
  26. package/dist/measure.d.ts.map +1 -1
  27. package/dist/measure.js +4 -0
  28. package/dist/protocol-adapter.d.ts.map +1 -1
  29. package/dist/protocol-adapter.js +21 -0
  30. package/dist/protocol-rehydrate.d.ts +46 -0
  31. package/dist/protocol-rehydrate.d.ts.map +1 -0
  32. package/dist/protocol-rehydrate.js +218 -0
  33. package/dist/publishing/features/dataset-publication.d.ts +10 -0
  34. package/dist/publishing/features/dataset-publication.d.ts.map +1 -0
  35. package/dist/publishing/features/dataset-publication.js +34 -0
  36. package/dist/publishing/node.d.ts +16 -0
  37. package/dist/publishing/node.d.ts.map +1 -0
  38. package/dist/publishing/node.js +35 -0
  39. package/dist/publishing/publisher.d.ts +17 -0
  40. package/dist/publishing/publisher.d.ts.map +1 -0
  41. package/dist/publishing/publisher.js +32 -0
  42. package/dist/publishing/types.d.ts +31 -0
  43. package/dist/publishing/types.d.ts.map +1 -0
  44. package/dist/publishing/types.js +1 -0
  45. package/dist/query-builder-protocol.d.ts +6 -2
  46. package/dist/query-builder-protocol.d.ts.map +1 -1
  47. package/dist/semantic-plan.d.ts +3 -1
  48. package/dist/semantic-plan.d.ts.map +1 -1
  49. package/dist/semantic-planner.d.ts.map +1 -1
  50. package/dist/semantic-planner.js +4 -0
  51. package/dist/semantic-query-schema.d.ts +48 -0
  52. package/dist/semantic-query-schema.d.ts.map +1 -0
  53. package/dist/semantic-query-schema.js +218 -0
  54. package/dist/sql-utils.d.ts +36 -0
  55. package/dist/sql-utils.d.ts.map +1 -1
  56. package/dist/sql-utils.js +76 -0
  57. package/dist/tools.d.ts +5 -0
  58. package/dist/tools.d.ts.map +1 -1
  59. package/dist/tools.js +25 -267
  60. package/dist/types.d.ts +102 -12
  61. package/dist/types.d.ts.map +1 -1
  62. package/dist/utils/agent-catalog-projection.d.ts +78 -0
  63. package/dist/utils/agent-catalog-projection.d.ts.map +1 -0
  64. package/dist/utils/agent-catalog-projection.js +179 -0
  65. package/dist/utils/dataset-cache-policy.d.ts +34 -0
  66. package/dist/utils/dataset-cache-policy.d.ts.map +1 -0
  67. package/dist/utils/dataset-cache-policy.js +50 -0
  68. package/dist/utils/dataset-contract.d.ts +2 -2
  69. package/dist/utils/dataset-contract.d.ts.map +1 -1
  70. package/dist/utils/dataset-contract.js +3 -1
  71. package/dist/utils/dataset-definition-validation.d.ts +35 -0
  72. package/dist/utils/dataset-definition-validation.d.ts.map +1 -0
  73. package/dist/utils/dataset-definition-validation.js +215 -0
  74. package/dist/utils/dataset-metric-ref.d.ts +2 -2
  75. package/dist/utils/dataset-metric-ref.d.ts.map +1 -1
  76. package/dist/utils/dataset-metric-ref.js +5 -3
  77. package/dist/utils/metric-alias.d.ts +4 -0
  78. package/dist/utils/metric-alias.d.ts.map +1 -0
  79. package/dist/utils/metric-alias.js +28 -0
  80. package/dist/utils/protocol-metric-capabilities.d.ts +7 -0
  81. package/dist/utils/protocol-metric-capabilities.d.ts.map +1 -0
  82. package/dist/utils/protocol-metric-capabilities.js +57 -0
  83. package/dist/utils/protocol-rehydrate-filters.d.ts +10 -0
  84. package/dist/utils/protocol-rehydrate-filters.d.ts.map +1 -0
  85. package/dist/utils/protocol-rehydrate-filters.js +36 -0
  86. package/dist/utils/protocol-semantic-metadata.d.ts +5 -0
  87. package/dist/utils/protocol-semantic-metadata.d.ts.map +1 -0
  88. package/dist/utils/protocol-semantic-metadata.js +5 -0
  89. package/dist/utils/published-name.d.ts +3 -0
  90. package/dist/utils/published-name.d.ts.map +1 -0
  91. package/dist/utils/published-name.js +7 -0
  92. package/dist/utils/published-relationships.d.ts +34 -0
  93. package/dist/utils/published-relationships.d.ts.map +1 -0
  94. package/dist/utils/published-relationships.js +35 -0
  95. package/dist/utils/relationship-fields.d.ts +7 -0
  96. package/dist/utils/relationship-fields.d.ts.map +1 -1
  97. package/dist/utils/relationship-fields.js +13 -1
  98. package/dist/utils/result-limits.d.ts +34 -0
  99. package/dist/utils/result-limits.d.ts.map +1 -0
  100. package/dist/utils/result-limits.js +40 -0
  101. package/dist/utils/semantic-metadata-validation.d.ts +4 -0
  102. package/dist/utils/semantic-metadata-validation.d.ts.map +1 -0
  103. package/dist/utils/semantic-metadata-validation.js +103 -0
  104. package/dist/utils/semantic-metadata.d.ts +4 -0
  105. package/dist/utils/semantic-metadata.d.ts.map +1 -0
  106. package/dist/utils/semantic-metadata.js +13 -0
  107. package/dist/utils/semantic-result-serialization.d.ts +9 -0
  108. package/dist/utils/semantic-result-serialization.d.ts.map +1 -0
  109. package/dist/utils/semantic-result-serialization.js +26 -0
  110. package/dist/utils/semantic-tool.d.ts +5 -0
  111. package/dist/utils/semantic-tool.d.ts.map +1 -0
  112. package/dist/utils/semantic-tool.js +29 -0
  113. package/package.json +5 -4
@@ -79,6 +79,7 @@ export declare class DatasetClientImpl extends MetricQueryEngine implements Data
79
79
  private backend?;
80
80
  private readonly queryCache;
81
81
  private readonly cacheEnabledByDefault;
82
+ private readonly cacheDefaults;
82
83
  private readonly defaultCacheScope?;
83
84
  constructor(options: CreateDatasetClientOptions);
84
85
  getCacheStats(): SemanticCacheStats;
@@ -107,6 +108,11 @@ export declare class DatasetClientImpl extends MetricQueryEngine implements Data
107
108
  validate<TTarget extends SemanticTarget>(target: TTarget, query?: SemanticQuery<TTarget>, context?: ExecutionContext): ValidationResult;
108
109
  private executeMetric;
109
110
  private executeDataset;
111
+ /**
112
+ * Folds the dataset's declared cache policy into the call's context, so both
113
+ * the cacheability decision and the lookup see the same resolved TTL.
114
+ */
115
+ private datasetCacheContext;
110
116
  private toDatasetSQL;
111
117
  }
112
118
  export declare function createDatasetClient(options: CreateDatasetClientOptions): DatasetClient;
@@ -1 +1 @@
1
- {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAGhB,kBAAkB,EAClB,eAAe,EAEhB,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAEV,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAuB,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAgB7E,OAAO,EAIL,KAAK,4BAA4B,EAClC,MAAM,oBAAoB,CAAC;AAY5B,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACxB,MAAM,iCAAiC,CAAC;AAkKzC,MAAM,WAAW,wBAAwB;IACvC,mDAAmD;IACnD,cAAc,EAAE,wBAAwB,CAAC;CAC1C;AAED,MAAM,WAAW,0BAA0B;IACzC,+EAA+E;IAC/E,YAAY,CAAC,EAAE,wBAAwB,CAAC;IACxC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,oBAAoB,CAAC;CAC9B;AAWD,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,gBAAgB,GAAG,kBAAkB,CAAC;AAE/E,MAAM,MAAM,aAAa,CAAC,OAAO,SAAS,cAAc,IACtD,OAAO,SAAS,kBAAkB,GAAG,YAAY,GAAG,WAAW,CAAC;AAElE,MAAM,MAAM,cAAc,CACxB,OAAO,SAAS,cAAc,EAC9B,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAC5B,OAAO,SAAS,kBAAkB,GAClC,kBAAkB,CAAC,IAAI,CAAC,GACxB,YAAY,CAAC,IAAI,CAAC,CAAC;AAEvB,KAAK,YAAY,CAAC,YAAY,SAAS,MAAM,GAAG,MAAM,IACpD,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;AAE/C,KAAK,cAAc,CACjB,YAAY,SAAS,MAAM,EAC3B,WAAW,SAAS,MAAM,EAC1B,QAAQ,SAAS,YAAY,CAAC,YAAY,CAAC,IACzC,SAAS,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;AAExD,KAAK,qBAAqB,CACxB,YAAY,SAAS,MAAM,EAC3B,WAAW,SAAS,MAAM,EAC1B,QAAQ,SAAS,YAAY,CAAC,YAAY,CAAC,IACzC,gBAAgB,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;AAE/D,MAAM,WAAW,aAAa;IAC5B,OAAO,CACL,QAAQ,SAAS,YAAY,EAC7B,KAAK,CAAC,MAAM,SAAS,eAAe,CAAC,QAAQ,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC,EAE1E,MAAM,EAAE,QAAQ,EAChB,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,OAAO,CACL,YAAY,SAAS,MAAM,EAC3B,WAAW,SAAS,MAAM,EAC1B,QAAQ,SAAS,YAAY,CAAC,YAAY,CAAC,EAC3C,KAAK,CAAC,MAAM,SAAS,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,EAElG,MAAM,EAAE,cAAc,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,CAAC,EAC3D,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3D,OAAO,CACL,YAAY,SAAS,MAAM,EAC3B,WAAW,SAAS,MAAM,EAC1B,QAAQ,SAAS,YAAY,CAAC,YAAY,CAAC,EAC3C,KAAK,CAAC,MAAM,SAAS,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,EAElG,MAAM,EAAE,qBAAqB,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,CAAC,EAClE,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,SAAS,cAAc,GAAG,cAAc,EACrF,MAAM,EAAE,OAAO,EACf,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,EAC9B,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAC1C,KAAK,CAAC,OAAO,SAAS,cAAc,EAClC,MAAM,EAAE,OAAO,EACf,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,EAC9B,OAAO,CAAC,EAAE,gBAAgB,GACzB,MAAM,CAAC;IACV,QAAQ,CAAC,OAAO,SAAS,cAAc,EACrC,MAAM,EAAE,OAAO,EACf,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,EAC9B,OAAO,CAAC,EAAE,gBAAgB,GACzB,gBAAgB,CAAC;IACpB,+DAA+D;IAC/D,aAAa,IAAI,kBAAkB,CAAC;IACpC;;;OAGG;IACH,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAChC;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,cAAc,CAA0B;gBAEpC,OAAO,EAAE,wBAAwB;IAI7C,SAAS,CAAC,iBAAiB,IAAI,uBAAuB;IAItD;;OAEG;IACG,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,MAAM,EAAE,SAAS,GAAG,gBAAgB,EACpC,KAAK,GAAE,WAAgB,EACvB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAW3B;;OAEG;IACH,KAAK,CACH,MAAM,EAAE,SAAS,GAAG,gBAAgB,EACpC,KAAK,GAAE,WAAgB,EACvB,OAAO,CAAC,EAAE,gBAAgB,GACzB,MAAM;IAmBT;;OAEG;IACH,QAAQ,CACN,MAAM,EAAE,SAAS,GAAG,gBAAgB,EACpC,KAAK,EAAE,WAAW,EAClB,OAAO,CAAC,EAAE,gBAAgB,GACzB,gBAAgB;YA+BL,aAAa;IAsD3B,OAAO,CAAC,cAAc;IAuDtB,OAAO,CAAC,yBAAyB;CA+GlC;AAED,qBAAa,iBAAkB,SAAQ,iBAAkB,YAAW,aAAa;IAC/E,OAAO,CAAC,OAAO,CAAC,CAAkB;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAU;IAChD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IACpD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAS;gBAEhC,OAAO,EAAE,0BAA0B;IA0B/C,aAAa,IAAI,kBAAkB;IAInC,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAI9B;;;;OAIG;IACH,OAAO,CAAC,WAAW;IA0BnB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAUxB,UAAU,CACR,MAAM,EAAE,SAAS,GAAG,gBAAgB,EACpC,KAAK,GAAE,WAAgB,EACvB,OAAO,CAAC,EAAE,gBAAgB,GACzB,QAAQ;IASX,WAAW,CACT,EAAE,EAAE,kBAAkB,EACtB,KAAK,GAAE,YAAiB,EACxB,OAAO,CAAC,EAAE,gBAAgB,GACzB,QAAQ;IAIX;;OAEG;IACH,OAAO,CACL,QAAQ,SAAS,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EACpD,KAAK,CAAC,MAAM,SAAS,eAAe,CAAC,QAAQ,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC,EAE1E,MAAM,EAAE,QAAQ,EAChB,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACnD,OAAO,CACL,YAAY,SAAS,MAAM,EAC3B,WAAW,SAAS,MAAM,EAC1B,QAAQ,SAAS,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,CAAC,EAC7D,KAAK,CAAC,MAAM,SAAS,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,EAElG,MAAM,EAAE,SAAS,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,CAAC,EAC3D,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAC1D,OAAO,CACL,YAAY,SAAS,MAAM,EAC3B,WAAW,SAAS,MAAM,EAC1B,QAAQ,SAAS,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,CAAC,EAC7D,KAAK,CAAC,MAAM,SAAS,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,EAElG,MAAM,EAAE,gBAAgB,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,CAAC,EAClE,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAqB1D,KAAK,CAAC,OAAO,SAAS,cAAc,EAClC,MAAM,EAAE,OAAO,EACf,KAAK,GAAE,aAAa,CAAC,OAAO,CAAgC,EAC5D,OAAO,CAAC,EAAE,gBAAgB,GACzB,MAAM;IAQT,QAAQ,CAAC,OAAO,SAAS,cAAc,EACrC,MAAM,EAAE,OAAO,EACf,KAAK,GAAE,aAAa,CAAC,OAAO,CAAgC,EAC5D,OAAO,CAAC,EAAE,gBAAgB,GACzB,gBAAgB;IAQnB,OAAO,CAAC,aAAa;IAuDrB,OAAO,CAAC,cAAc;IAqDtB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,YAAY;CAWrB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,aAAa,CAEtF;AAED,YAAY,EAAE,4BAA4B,EAAE,CAAC"}
package/dist/executor.js CHANGED
@@ -1,9 +1,4 @@
1
- /**
2
- * Semantic dataset client internals.
3
- *
4
- * Public callers use `createDatasetClient(...).execute(...)`. The implementation
5
- * stays database-agnostic via query-builder and backend protocol interfaces.
6
- */
1
+ import { protocolMetricCapabilityErrors } from './utils/protocol-metric-capabilities.js';
7
2
  import { toQueryBuilderFactory } from './query-builder-protocol.js';
8
3
  import { quoteSQLIdentifier, validateSQLIdentifier } from './sql-utils.js';
9
4
  import { SUPPORTED_TIME_GRAINS, isSupportedTimeGrain } from './constants.js';
@@ -15,13 +10,16 @@ import { buildDatasetQueryBuilder, runDatasetQuery, validateDatasetQuery, } from
15
10
  import { buildDatasetPlan, buildMetricPlan, } from './semantic-planner.js';
16
11
  import { getRuntimeTenantId, getRuntimeTenantPredicate, validateTenantRuntime, } from './utils/tenant-runtime.js';
17
12
  import { applyPagination, overfetchLimit } from './utils/pagination.js';
13
+ import { serializeSemanticMeasureValues } from './utils/semantic-result-serialization.js';
18
14
  import { SemanticQueryCache, } from './cache/semantic-query-cache.js';
19
15
  import { buildDatasetQuerySignature, buildMetricQuerySignature, } from './cache/query-signature.js';
16
+ import { resolveResultLimit, withResultLimit } from './utils/result-limits.js';
17
+ import { resolveDatasetCacheRuntime, } from './utils/dataset-cache-policy.js';
20
18
  import { isQualifiedField, resolveQualifiedField } from './utils/relationship-fields.js';
21
19
  import { validateQualifiedFilter, validateRelationshipTenantRuntime, } from './utils/relationship-validation.js';
22
20
  import { applyRelationshipJoins, buildRelationshipBuilderContext, qualifyBaseColumn, } from './utils/relationship-builder-plan.js';
23
21
  function validateQuery(metric, query, context) {
24
- const errors = [];
22
+ const errors = protocolMetricCapabilityErrors(metric, query);
25
23
  const ref = getMetricRef(metric);
26
24
  const ds = ref.dataset;
27
25
  const dimensionNames = Object.keys(ds.dimensions);
@@ -212,18 +210,40 @@ export class MetricQueryEngine {
212
210
  if (spec.__type === 'derived_metric_spec') {
213
211
  // Derived metrics: build CTE via builder, outer query via string, execute via rawQuery
214
212
  const { sql, params } = this.buildDerivedSQLViaBuilder(ref, spec, buildQuery, grain, context);
215
- const rows = await activeBuilderFactory.rawQuery(sql, params);
213
+ const rows = await activeBuilderFactory.rawQuery(sql, params, {
214
+ abortSignal: context?.abortSignal,
215
+ });
216
216
  const timingMs = Date.now() - start;
217
217
  const { data, pagination } = applyPagination(rows, query.limit, query.offset);
218
- return { data, meta: { sql, timingMs, tenant: getRuntimeTenantId(context), rowCount: data.length, pagination } };
218
+ const serializedData = serializeSemanticMeasureValues(data, [ref.name]);
219
+ return {
220
+ data: serializedData,
221
+ meta: {
222
+ sql,
223
+ timingMs,
224
+ tenant: getRuntimeTenantId(context),
225
+ rowCount: serializedData.length,
226
+ pagination,
227
+ },
228
+ };
219
229
  }
220
230
  // Base metrics: fully use the builder's execute()
221
231
  const builder = this.buildBaseQuery(ref, spec, ref.dataset, buildQuery, grain, context);
222
232
  const { sql } = builder.toSQLWithParams();
223
- const rows = await builder.execute();
233
+ const rows = await builder.execute({ abortSignal: context?.abortSignal });
224
234
  const timingMs = Date.now() - start;
225
235
  const { data, pagination } = applyPagination(rows, query.limit, query.offset);
226
- return { data, meta: { sql, timingMs, tenant: getRuntimeTenantId(context), rowCount: data.length, pagination } };
236
+ const serializedData = serializeSemanticMeasureValues(data, [ref.name]);
237
+ return {
238
+ data: serializedData,
239
+ meta: {
240
+ sql,
241
+ timingMs,
242
+ tenant: getRuntimeTenantId(context),
243
+ rowCount: serializedData.length,
244
+ pagination,
245
+ },
246
+ };
227
247
  }
228
248
  buildBaseQuery(ref, spec, ds, query, grain, context) {
229
249
  const activeBuilderFactory = resolveBuilderFactory(context, this.builderFactory);
@@ -351,6 +371,7 @@ export class DatasetClientImpl extends MetricQueryEngine {
351
371
  backend;
352
372
  queryCache;
353
373
  cacheEnabledByDefault;
374
+ cacheDefaults;
354
375
  defaultCacheScope;
355
376
  constructor(options) {
356
377
  if (!options.queryBuilder && !options.backend) {
@@ -370,6 +391,12 @@ export class DatasetClientImpl extends MetricQueryEngine {
370
391
  this.queryCache = new SemanticQueryCache(options.cache);
371
392
  this.cacheEnabledByDefault = (options.cache?.ttlMs ?? 0) > 0;
372
393
  this.defaultCacheScope = options.cache?.scope;
394
+ // Kept so a dataset's declared ceiling can clamp the client default too; the
395
+ // cache would otherwise fill a missing TTL from it after clamping has run.
396
+ this.cacheDefaults = {
397
+ ttlMs: options.cache?.ttlMs,
398
+ staleWhileRevalidateMs: options.cache?.staleWhileRevalidateMs,
399
+ };
373
400
  }
374
401
  getCacheStats() {
375
402
  return this.queryCache.getStats();
@@ -383,7 +410,7 @@ export class DatasetClientImpl extends MetricQueryEngine {
383
410
  * the common uncached path.
384
411
  */
385
412
  isCacheable(context) {
386
- if (context?.cache === false || context?.cache?.mode === 'bypass') {
413
+ if (context?.abortSignal || context?.cache === false || context?.cache?.mode === 'bypass') {
387
414
  return false;
388
415
  }
389
416
  const builderOverride = context?.runtime?.builderFactory;
@@ -449,47 +476,79 @@ export class DatasetClientImpl extends MetricQueryEngine {
449
476
  return super.validate(target, query, context);
450
477
  }
451
478
  executeMetric(metric, query, context) {
479
+ const ds = getMetricRef(metric).dataset;
480
+ // Same ceiling and same cache policy as a dataset query: a metric is a
481
+ // named query over the dataset, not a way around what it declared.
482
+ const resultLimit = resolveResultLimit(query.limit, ds.limits);
483
+ const boundedQuery = resultLimit.limit === query.limit ? query : { ...query, limit: resultLimit.limit };
484
+ const cacheRuntime = this.datasetCacheContext(ds, context);
452
485
  const run = () => {
453
486
  if (this.backend) {
454
- const validation = validateQuery(metric, query, context);
487
+ const validation = validateQuery(metric, boundedQuery, context);
455
488
  if (!validation.valid) {
456
489
  throw new Error(`Invalid metric query: ${validation.errors.join('; ')}`);
457
490
  }
458
- return this.backend.execute(this.planMetric(metric, query, context));
491
+ return this.backend.execute(this.planMetric(metric, boundedQuery, context), { abortSignal: context?.abortSignal }).then((result) => ({
492
+ ...result,
493
+ data: serializeSemanticMeasureValues(result.data, [getMetricRef(metric).name]),
494
+ }));
459
495
  }
460
- return this.run(metric, query, context);
496
+ return this.run(metric, boundedQuery, context);
461
497
  };
462
- if (!this.isCacheable(context)) {
463
- return run();
498
+ if (!this.isCacheable(cacheRuntime)) {
499
+ return withResultLimit(run(), resultLimit.meta);
464
500
  }
465
501
  // Validate semantic rules before cache lookup so invalid queries and
466
502
  // missing tenant runtime cannot be served from cache. Avoid this.validate()
467
503
  // here because it dry-builds SQL, which is unnecessary on cache hits and
468
504
  // invalid for backend-only clients.
469
- const validation = validateQuery(metric, query, context);
505
+ const validation = validateQuery(metric, boundedQuery, context);
470
506
  if (!validation.valid) {
471
507
  throw new Error(`Invalid metric query: ${validation.errors.join('; ')}`);
472
508
  }
473
- return this.queryCache.through(buildMetricQuerySignature(metric, query, this.signatureContext(context)), run, context?.cache);
509
+ return withResultLimit(this.queryCache.through(buildMetricQuerySignature(metric, boundedQuery, this.signatureContext(cacheRuntime)), run, cacheRuntime?.cache), resultLimit.meta);
474
510
  }
475
511
  executeDataset(ds, query, context) {
476
512
  const validation = this.validate(ds, query, context);
477
513
  if (!validation.valid) {
478
514
  throw new Error(`Invalid dataset query: ${validation.errors.join('; ')}`);
479
515
  }
516
+ // Bound before the signature is built, so an unbounded call and an explicit
517
+ // call at the ceiling produce the same rows and share one cache entry.
518
+ const resultLimit = resolveResultLimit(query.limit, ds.limits);
519
+ const boundedQuery = resultLimit.limit === query.limit ? query : { ...query, limit: resultLimit.limit };
520
+ const cacheRuntime = this.datasetCacheContext(ds, context);
480
521
  const run = () => {
481
522
  if (this.backend) {
482
- return this.backend.execute(this.planDataset(ds, query, context));
523
+ return this.backend.execute(this.planDataset(ds, boundedQuery, context), { abortSignal: context?.abortSignal }).then((result) => ({
524
+ ...result,
525
+ data: serializeSemanticMeasureValues(result.data,
526
+ // Same measures either way; boundedQuery differs only in `limit`.
527
+ boundedQuery.measures ?? Object.keys(ds.measures)),
528
+ }));
483
529
  }
484
- return runDatasetQuery(ds, query, {
530
+ return runDatasetQuery(ds, boundedQuery, {
485
531
  builderFactory: resolveBuilderFactory(context, this.getBuilderFactory()),
486
532
  context,
487
533
  });
488
534
  };
489
- if (!this.isCacheable(context)) {
490
- return run();
535
+ if (!this.isCacheable(cacheRuntime)) {
536
+ return withResultLimit(run(), resultLimit.meta);
537
+ }
538
+ // Annotated outside the cache: the ceiling is derived from the query, not
539
+ // from the rows, so it must not be stored in or read back from an entry.
540
+ return withResultLimit(this.queryCache.through(buildDatasetQuerySignature(ds, boundedQuery, this.signatureContext(cacheRuntime)), run, cacheRuntime?.cache), resultLimit.meta);
541
+ }
542
+ /**
543
+ * Folds the dataset's declared cache policy into the call's context, so both
544
+ * the cacheability decision and the lookup see the same resolved TTL.
545
+ */
546
+ datasetCacheContext(ds, context) {
547
+ const cache = resolveDatasetCacheRuntime(ds.cache, context?.cache, this.cacheDefaults);
548
+ if (cache === context?.cache) {
549
+ return context;
491
550
  }
492
- return this.queryCache.through(buildDatasetQuerySignature(ds, query, this.signatureContext(context)), run, context?.cache);
551
+ return { ...context, cache };
493
552
  }
494
553
  toDatasetSQL(ds, query, context) {
495
554
  const builder = buildDatasetQueryBuilder(ds, query, {
@@ -1 +1 @@
1
- {"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../src/field.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAa,MAAM,YAAY,CAAC;AAkBnF,eAAO,MAAM,SAAS;sBAfZ,QAAQ,SAAS,gBAAgB,GAAG,SAAS;sBAA7C,QAAQ,SAAS,gBAAgB,GAAG,SAAS;uBAA7C,QAAQ,SAAS,gBAAgB,GAAG,SAAS;yBAA7C,QAAQ,SAAS,gBAAgB,GAAG,SAAS;CAoB7C,CAAC"}
1
+ {"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../src/field.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAa,MAAM,YAAY,CAAC;AAoBnF,eAAO,MAAM,SAAS;sBAhBZ,QAAQ,SAAS,gBAAgB,GAAG,SAAS;sBAA7C,QAAQ,SAAS,gBAAgB,GAAG,SAAS;uBAA7C,QAAQ,SAAS,gBAAgB,GAAG,SAAS;yBAA7C,QAAQ,SAAS,gBAAgB,GAAG,SAAS;CAqB7C,CAAC"}
package/dist/field.js CHANGED
@@ -15,12 +15,14 @@
15
15
  * });
16
16
  * ```
17
17
  */
18
+ import { snapshotSemanticMetadata } from './utils/semantic-metadata.js';
18
19
  function createFieldHelper(fieldType) {
19
20
  return (opts) => ({
20
21
  __type: 'field_definition',
21
22
  fieldType,
22
23
  label: opts?.label,
23
24
  description: opts?.description,
25
+ ...snapshotSemanticMetadata(opts ?? {}),
24
26
  column: opts?.column,
25
27
  sql: opts?.sql,
26
28
  dependencies: opts?.dependencies,
@@ -1 +1 @@
1
- {"version":3,"file":"in-memory-backend.d.ts","sourceRoot":"","sources":["../src/in-memory-backend.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAGV,eAAe,EAKhB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAC3D,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AA0U3D;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe,CAwE7E"}
1
+ {"version":3,"file":"in-memory-backend.d.ts","sourceRoot":"","sources":["../src/in-memory-backend.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAGV,eAAe,EAKhB,MAAM,oBAAoB,CAAC;AAG5B,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAC3D,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AA0T3D;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe,CAwE7E"}
@@ -1,3 +1,4 @@
1
+ import { serializeSemanticMeasureValues } from './utils/semantic-result-serialization.js';
1
2
  function valueForField(row, field) {
2
3
  return row[field];
3
4
  }
@@ -276,22 +277,6 @@ function measureColumns(plan) {
276
277
  ? plan.aggregations.map((aggregation) => aggregation.name)
277
278
  : plan.metrics.map((metric) => metric.name);
278
279
  }
279
- function serializeMeasures(rows, measures) {
280
- return rows.map((row) => {
281
- const next = { ...row };
282
- for (const name of measures) {
283
- if (typeof next[name] === 'number' && !Number.isFinite(next[name])) {
284
- // ClickHouse JSON output serializes nan/inf as null
285
- // (output_format_json_quote_denormals defaults to 0).
286
- next[name] = null;
287
- }
288
- else if (next[name] != null) {
289
- next[name] = String(next[name]);
290
- }
291
- }
292
- return next;
293
- });
294
- }
295
280
  /**
296
281
  * @deprecated The plan/backend execution path is frozen (bug fixes only); this
297
282
  * backend remains as the test harness for that path. New code should use
@@ -352,7 +337,7 @@ export function createInMemoryBackend(tables) {
352
337
  }
353
338
  async function execute(plan) {
354
339
  const start = Date.now();
355
- const data = serializeMeasures(executeNode(plan), measureColumns(plan));
340
+ const data = serializeSemanticMeasureValues(executeNode(plan), measureColumns(plan));
356
341
  return {
357
342
  data: data,
358
343
  meta: { timingMs: Date.now() - start },
package/dist/index.d.ts CHANGED
@@ -6,16 +6,25 @@ export { sum, count, countDistinct, avg, min, max, percentile, median, argMax, a
6
6
  export { divide, multiply, subtract, add, nullIfZero, coalesce, round, floor, ceil, } from './formulas.js';
7
7
  export { eq, neq, gt, gte, lt, lte, inList, notInList, between, like, asc, desc, filter, order, } from './query-helpers.js';
8
8
  export { createDatasetRegistry } from './registry.js';
9
+ export { publishDatasets } from './publishing/publisher.js';
10
+ export type { DatasetPublisher } from './publishing/publisher.js';
11
+ export type { PublishableMetric, PublishedMetricHandle, PublishedMetricMap, PublishedMetrics, PublishedDataset, PublishedDatasetRegistry, PublishDatasetOptions, } from './publishing/types.js';
9
12
  export { getDatasetCatalog, getDatasetCatalogs, getQueryableRelationshipFields } from './catalog.js';
10
13
  export { listQueryableRelationshipFields } from './utils/relationship-fields.js';
11
14
  export type { DatasetCatalog, DatasetCatalogMap, DatasetCatalogSource, DimensionCatalogEntry, MeasureCatalogEntry, MetricCatalogEntry, FilterCatalogEntry, RelationshipCatalogEntry, } from './catalog.js';
15
+ export { DEFAULT_AGENT_CATALOG_MAX_BYTES, assertAgentSafeCatalogBudget, projectAgentSafeCatalog, projectTrustedDebugCatalog, } from './agent-catalog.js';
16
+ export type { AgentCatalogDataset, AgentCatalogDatasetRegistry, AgentCatalogProjectionOptions, AgentCatalogDimension, AgentCatalogFilter, AgentCatalogMeasure, AgentCatalogMetric, AgentCatalogRelationship, AgentCatalogSource, AgentSafeCatalog, TrustedDebugCatalog, TrustedDebugCatalogAuthorization, } from './agent-catalog.js';
12
17
  export { serializeSemanticContract, contractToStableJson, hashContract, SEMANTIC_CONTRACT_VERSION, } from './contract.js';
18
+ export { rehydrateProtocolDatasets, UnsupportedContractFeatureError, } from './protocol-rehydrate.js';
19
+ export type { RehydratedDataset, RehydrateProtocolDatasetsOptions, } from './protocol-rehydrate.js';
13
20
  export { buildProtocolDatasetContract } from './protocol-adapter.js';
14
21
  export type { BuildProtocolDatasetContractOptions } from './protocol-adapter.js';
15
22
  export { compilePortableSqlExpression, DEFAULT_SQL_PORTABILITY_LIMITS, } from './sql-portability.js';
16
23
  export type { SqlPortabilityIssue, SqlPortabilityIssueCode, SqlPortabilityLimits, SqlPortabilityOptions, SqlPortabilityResult, } from './sql-portability.js';
17
24
  export type { SemanticContract, SerializeSemanticContractOptions, ContractDataset, ContractDimension, ContractMeasure, ContractMetric, ContractFilter, ContractRelationship, } from './contract.js';
18
25
  export { generateDatasetTools, toOpenAITools, toAISDKTools, toMcpTools, } from './tools.js';
26
+ export { buildDatasetInputSchema, buildMetricInputSchema, buildCanonicalSemanticQuerySchemas, toSemanticJsonSchema, DEFAULT_SEMANTIC_QUERY_SCHEMA_LIMITS, } from './semantic-query-schema.js';
27
+ export type { CanonicalSemanticQuerySchemas, SemanticMetricQueryContract, SemanticQuerySchemaLimits, SemanticQuerySchemaOptions, SemanticQuerySchemaSource, } from './semantic-query-schema.js';
19
28
  export type { AISDKToolDefinition, DatasetToolAnalytics, DatasetToolMode, GenerateDatasetToolsOptions, JsonSchema, McpToolDefinition, OpenAIToolDefinition, SemanticToolDefinition, } from './tools.js';
20
29
  export { createDatasetClient } from './executor.js';
21
30
  export type { DatasetClient, CreateDatasetClientOptions } from './executor.js';
@@ -31,5 +40,5 @@ export type { QueryBuilderLike, QueryBuilderFactoryLike, QueryBuilderFactoryComp
31
40
  export { toQueryBuilderFactory } from './query-builder-protocol.js';
32
41
  export { validateSQLIdentifier, isSafeSQLIdentifier, quoteSQLIdentifier } from './sql-utils.js';
33
42
  export { GRAIN_FUNCTIONS, SEMANTIC_FILTER_OPERATORS, SUPPORTED_TIME_GRAINS } from './constants.js';
34
- export type { FieldType, DimensionType, DimensionOptions, DimensionDefinition, MeasureOptions, MeasureDefinition, InferDimensionType, RelationshipKind, RelationshipDefinition, AggregationType, MeasureAggregation, AggregationSpec, FormulaExpr, DerivedMetricSpec, TimeGrain, MetricRef, BaseMetricRef, DerivedMetricRef, GrainedMetricRef, MetricContract, MetricFilter, MetricOrderBy, MetricQuery, DatasetQuery, MetricResultMeta, MetricResult, DatasetQueryResult, MetricHandle, ExecutionContext, SemanticExecutionRuntime, SemanticTenantRuntime, SemanticFilterDefinition, SemanticFiltersDefinition, DatasetConfig, DatasetLimits, DatasetInstance, AnyDatasetInstance, BaseMetricConfig, DerivedMetricConfig, DatasetRegistryInstance, DatasetFieldNames, DatasetDimensionNames, DatasetQueryableDimensions, DatasetMeasureNames, DatasetOrderableNames, DatasetQueryFor, DatasetRow, DatasetRowFor, DatasetQueryResultFor, MetricQueryFor, MetricRow, MetricRowFor, MetricResultFor, KnownStringKeys, } from './types.js';
43
+ export type { FieldType, DimensionType, DimensionOptions, DimensionDefinition, MeasureOptions, MeasureDefinition, InferDimensionType, RelationshipKind, RelationshipDefinition, AggregationType, MeasureAggregation, AggregationSpec, FormulaExpr, DerivedMetricSpec, TimeGrain, MetricRef, BaseMetricRef, DerivedMetricRef, GrainedMetricRef, MetricContract, MetricFilter, MetricOrderBy, MetricQuery, DatasetQuery, MetricResultMeta, MetricResult, DatasetQueryResult, MetricHandle, ExecutionContext, SemanticExecutionRuntime, SemanticTenantRuntime, SemanticFilterDefinition, SemanticFiltersDefinition, DatasetConfig, DatasetDefaults, DatasetFreshness, DatasetLimits, DatasetCachePolicy, SemanticMetadata, SemanticSensitivity, DatasetInstance, AnyDatasetInstance, BaseMetricConfig, DerivedMetricConfig, DatasetRegistryInstance, DatasetFieldNames, DatasetDimensionNames, DatasetQueryableDimensions, DatasetMeasureNames, DatasetOrderableNames, DatasetQueryFor, DatasetRow, DatasetRowFor, DatasetQueryResultFor, MetricQueryFor, MetricRow, MetricRowFor, MetricResultFor, KnownStringKeys, } from './types.js';
35
44
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -14,17 +14,24 @@ export { divide, multiply, subtract, add, nullIfZero, coalesce, round, floor, ce
14
14
  export { eq, neq, gt, gte, lt, lte, inList, notInList, between, like, asc, desc, filter, order, } from './query-helpers.js';
15
15
  // Registry
16
16
  export { createDatasetRegistry } from './registry.js';
17
+ // First-class publication builder for Serve, MCP, and agent consumers.
18
+ export { publishDatasets } from './publishing/publisher.js';
17
19
  // Catalog
18
20
  export { getDatasetCatalog, getDatasetCatalogs, getQueryableRelationshipFields } from './catalog.js';
19
21
  export { listQueryableRelationshipFields } from './utils/relationship-fields.js';
22
+ // Agent-safe and separately authorized trusted-debug catalog projections.
23
+ export { DEFAULT_AGENT_CATALOG_MAX_BYTES, assertAgentSafeCatalogBudget, projectAgentSafeCatalog, projectTrustedDebugCatalog, } from './agent-catalog.js';
20
24
  // Semantic contract (stable, hashable export for snapshots/diffs/validation)
21
25
  export { serializeSemanticContract, contractToStableJson, hashContract, SEMANTIC_CONTRACT_VERSION, } from './contract.js';
22
26
  // Portable deployment contract adapter
27
+ export { rehydrateProtocolDatasets, UnsupportedContractFeatureError, } from './protocol-rehydrate.js';
23
28
  export { buildProtocolDatasetContract } from './protocol-adapter.js';
24
29
  // SQL portability compiler (R1A-07)
25
30
  export { compilePortableSqlExpression, DEFAULT_SQL_PORTABILITY_LIMITS, } from './sql-portability.js';
26
31
  // Agent/tool metadata
27
32
  export { generateDatasetTools, toOpenAITools, toAISDKTools, toMcpTools, } from './tools.js';
33
+ // Canonical semantic query schemas shared by Serve, MCP, and agent adapters.
34
+ export { buildDatasetInputSchema, buildMetricInputSchema, buildCanonicalSemanticQuerySchemas, toSemanticJsonSchema, DEFAULT_SEMANTIC_QUERY_SCHEMA_LIMITS, } from './semantic-query-schema.js';
28
35
  // Dataset client
29
36
  export { createDatasetClient } from './executor.js';
30
37
  // Semantic query result cache
@@ -1 +1 @@
1
- {"version":3,"file":"measure.d.ts","sourceRoot":"","sources":["../src/measure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAsB,MAAM,YAAY,CAAC;AAexF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAI3D;AAoBD,iBAAS,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,iBAAiB,CAavG;AAED,eAAO,MAAM,OAAO;0BAnDH,MAAM,SAAS,cAAc,KAAG,iBAAiB;4BAAjD,MAAM,SAAS,cAAc,KAAG,iBAAiB;oCAAjD,MAAM,SAAS,cAAc,KAAG,iBAAiB;0BAAjD,MAAM,SAAS,cAAc,KAAG,iBAAiB;0BAAjD,MAAM,SAAS,cAAc,KAAG,iBAAiB;0BAAjD,MAAM,SAAS,cAAc,KAAG,iBAAiB;IA0DhE,gFAAgF;;IAEhF,mDAAmD;6BACnC,MAAM,SAAS,cAAc,KAAG,iBAAiB;IAEjE;;;;;OAKG;6BAjDY,MAAM,MAAM,MAAM,SAAS,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,KAAG,iBAAiB;IAmD7F,gFAAgF;6BAnDjE,MAAM,MAAM,MAAM,SAAS,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,KAAG,iBAAiB;IAqD7F,2DAA2D;6BAxE5C,MAAM,SAAS,cAAc,KAAG,iBAAiB;IA0EhE,8CAA8C;+BA1E/B,MAAM,SAAS,cAAc,KAAG,iBAAiB;CA4ExD,CAAC"}
1
+ {"version":3,"file":"measure.d.ts","sourceRoot":"","sources":["../src/measure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAsB,MAAM,YAAY,CAAC;AAiBxF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAI3D;AAqBD,iBAAS,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,iBAAiB,CAcvG;AAED,eAAO,MAAM,OAAO;0BAtDH,MAAM,SAAS,cAAc,KAAG,iBAAiB;4BAAjD,MAAM,SAAS,cAAc,KAAG,iBAAiB;oCAAjD,MAAM,SAAS,cAAc,KAAG,iBAAiB;0BAAjD,MAAM,SAAS,cAAc,KAAG,iBAAiB;0BAAjD,MAAM,SAAS,cAAc,KAAG,iBAAiB;0BAAjD,MAAM,SAAS,cAAc,KAAG,iBAAiB;IA6DhE,gFAAgF;;IAEhF,mDAAmD;6BACnC,MAAM,SAAS,cAAc,KAAG,iBAAiB;IAEjE;;;;;OAKG;6BAnDY,MAAM,MAAM,MAAM,SAAS,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,KAAG,iBAAiB;IAqD7F,gFAAgF;6BArDjE,MAAM,MAAM,MAAM,SAAS,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,KAAG,iBAAiB;IAuD7F,2DAA2D;6BA3E5C,MAAM,SAAS,cAAc,KAAG,iBAAiB;IA6EhE,8CAA8C;+BA7E/B,MAAM,SAAS,cAAc,KAAG,iBAAiB;CA+ExD,CAAC"}
package/dist/measure.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { snapshotSemanticMetadata } from './utils/semantic-metadata.js';
1
2
  function createMeasureHelper(aggregation) {
2
3
  return (field, opts) => ({
3
4
  __type: 'measure_definition',
@@ -7,6 +8,7 @@ function createMeasureHelper(aggregation) {
7
8
  dependencies: opts?.dependencies,
8
9
  label: opts?.label,
9
10
  description: opts?.description,
11
+ ...snapshotSemanticMetadata(opts ?? {}),
10
12
  filters: opts?.filters,
11
13
  });
12
14
  }
@@ -29,6 +31,7 @@ function createArgMeasureHelper(aggregation) {
29
31
  dependencies: opts?.dependencies,
30
32
  label: opts?.label,
31
33
  description: opts?.description,
34
+ ...snapshotSemanticMetadata(opts ?? {}),
32
35
  };
33
36
  };
34
37
  }
@@ -43,6 +46,7 @@ function createPercentileMeasure(field, level, opts) {
43
46
  dependencies: opts?.dependencies,
44
47
  label: opts?.label,
45
48
  description: opts?.description,
49
+ ...snapshotSemanticMetadata(opts ?? {}),
46
50
  filters: opts?.filters,
47
51
  };
48
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"protocol-adapter.d.ts","sourceRoot":"","sources":["../src/protocol-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,uBAAuB,EAE5B,KAAK,sBAAsB,EAI5B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,KAAK,EAEV,kBAAkB,EAIlB,YAAY,EAEb,MAAM,YAAY,CAAC;AASpB,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAC1D,QAAQ,CAAC,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAC3C,QAAQ,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC;CAC7E;AAwLD;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,kBAAkB,EAC3B,OAAO,GAAE,mCAAwC,GAChD,uBAAuB,CA8FzB"}
1
+ {"version":3,"file":"protocol-adapter.d.ts","sourceRoot":"","sources":["../src/protocol-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,uBAAuB,EAE5B,KAAK,sBAAsB,EAI5B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,KAAK,EAEV,kBAAkB,EAIlB,YAAY,EAEb,MAAM,YAAY,CAAC;AAUpB,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAC1D,QAAQ,CAAC,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAC3C,QAAQ,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC;CAC7E;AAyLD;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,kBAAkB,EAC3B,OAAO,GAAE,mCAAwC,GAChD,uBAAuB,CAiHzB"}
@@ -1,5 +1,6 @@
1
1
  import { parseProtocolIdentifier, parseProtocolQualifiedIdentifier, validateCanonicalValue, validateProtocolDatasetContract, } from '@hypequery/protocol';
2
2
  import { SEMANTIC_FILTER_OPERATORS } from './constants.js';
3
+ import { toProtocolSemanticMetadata } from './utils/protocol-semantic-metadata.js';
3
4
  function byName(left, right) {
4
5
  return left.name.localeCompare(right.name);
5
6
  }
@@ -134,6 +135,7 @@ function metricContract(exposedName, metric, endpoint) {
134
135
  ...(grain !== undefined ? { grain } : {}),
135
136
  ...(ref.label !== undefined ? { label: ref.label } : {}),
136
137
  ...(ref.description !== undefined ? { description: ref.description } : {}),
138
+ ...toProtocolSemanticMetadata(ref),
137
139
  endpoint,
138
140
  };
139
141
  return result;
@@ -170,7 +172,23 @@ export function buildProtocolDatasetContract(dataset, options = {}) {
170
172
  .sort(byName);
171
173
  const contract = {
172
174
  name: dataset.name,
175
+ ...(dataset.description !== undefined ? { description: dataset.description } : {}),
176
+ ...toProtocolSemanticMetadata(dataset),
173
177
  source: dataset.source,
178
+ ...(dataset.freshness !== undefined ? { freshness: { ...dataset.freshness } } : {}),
179
+ ...(dataset.owner !== undefined ? { owner: dataset.owner } : {}),
180
+ ...(dataset.defaults !== undefined
181
+ ? {
182
+ defaults: {
183
+ ...(dataset.defaults.dimensions !== undefined
184
+ ? { dimensions: [...dataset.defaults.dimensions].map(parseProtocolIdentifier) }
185
+ : {}),
186
+ ...(dataset.defaults.timeGrain !== undefined
187
+ ? { timeGrain: dataset.defaults.timeGrain }
188
+ : {}),
189
+ },
190
+ }
191
+ : {}),
174
192
  tenant: dataset.tenantKey
175
193
  ? { kind: 'required', field: dataset.tenantKey }
176
194
  : { kind: 'not-required' },
@@ -185,6 +203,7 @@ export function buildProtocolDatasetContract(dataset, options = {}) {
185
203
  groupable: dimension.groupable !== false,
186
204
  ...(dimension.label !== undefined ? { label: dimension.label } : {}),
187
205
  ...(dimension.description !== undefined ? { description: dimension.description } : {}),
206
+ ...toProtocolSemanticMetadata(dimension),
188
207
  })).sort(byName),
189
208
  measures: Object.entries(dataset.measures).map(([name, measure]) => ({
190
209
  name,
@@ -200,6 +219,7 @@ export function buildProtocolDatasetContract(dataset, options = {}) {
200
219
  filters: (measure.filters ?? []).map(filterExpression),
201
220
  ...(measure.label !== undefined ? { label: measure.label } : {}),
202
221
  ...(measure.description !== undefined ? { description: measure.description } : {}),
222
+ ...toProtocolSemanticMetadata(measure),
203
223
  })).sort(byName),
204
224
  filters: Object.entries(dataset.filters).map(([name, filter]) => ({
205
225
  name,
@@ -207,6 +227,7 @@ export function buildProtocolDatasetContract(dataset, options = {}) {
207
227
  operators: [...(filter.operators ?? SEMANTIC_FILTER_OPERATORS)],
208
228
  ...(filter.label !== undefined ? { label: filter.label } : {}),
209
229
  ...(filter.description !== undefined ? { description: filter.description } : {}),
230
+ ...toProtocolSemanticMetadata(filter),
210
231
  })).sort(byName),
211
232
  metrics,
212
233
  relationships: Object.entries(dataset.relationships).map(([name, relationship]) => ({
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Rebuilds executable datasets from a portable deployment contract.
3
+ *
4
+ * The inverse of `protocol-adapter.ts`. Decision 0005 chose portable native
5
+ * execution, which means a runtime resolves a dataset from the validated active
6
+ * contract and plans the query with the existing semantic planner — no customer
7
+ * module is loaded. This is the function that makes the contract executable.
8
+ *
9
+ * Rehydration deliberately routes through the public `dataset()` factory rather
10
+ * than assembling an instance by hand, so a rebuilt dataset is constructed by
11
+ * exactly the same code path as an authored one. That is what makes the
12
+ * byte-identical SQL claim mitigated by construction rather than by review.
13
+ */
14
+ import type { ProtocolDatasetContract } from '@hypequery/protocol';
15
+ import type { AnyDatasetInstance, DatasetCachePolicy, MetricHandle } from './types.js';
16
+ /** A rebuilt dataset in the registry shape Serve, MCP, and the planner accept. */
17
+ export type RehydratedDataset = AnyDatasetInstance & {
18
+ readonly metrics: Readonly<Record<string, MetricHandle>>;
19
+ };
20
+ export interface RehydrateProtocolDatasetsOptions {
21
+ /**
22
+ * Cache policy for the rebuilt datasets. Not carried by the contract — it is
23
+ * an operational concern of whoever runs the query, not of the deployment.
24
+ */
25
+ readonly cache?: DatasetCachePolicy;
26
+ }
27
+ /**
28
+ * Thrown when a contract describes something portable execution cannot rebuild.
29
+ *
30
+ * Callers map this onto the `unsupported-capability` invocation failure rather
31
+ * than executing an approximation, as decision 0005 requires.
32
+ */
33
+ export declare class UnsupportedContractFeatureError extends Error {
34
+ readonly dataset: string;
35
+ readonly feature: string;
36
+ constructor(datasetName: string, feature: string, detail: string);
37
+ }
38
+ /**
39
+ * Rebuild every dataset in a validated deployment contract.
40
+ *
41
+ * Datasets are returned keyed by contract name with their named metrics
42
+ * attached, which is the registry shape `getDatasetCatalog`,
43
+ * `projectAgentSafeCatalog`, and `DatasetClient` already accept.
44
+ */
45
+ export declare function rehydrateProtocolDatasets(contracts: readonly ProtocolDatasetContract[], options?: RehydrateProtocolDatasetsOptions): Readonly<Record<string, RehydratedDataset>>;
46
+ //# sourceMappingURL=protocol-rehydrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol-rehydrate.d.ts","sourceRoot":"","sources":["../src/protocol-rehydrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EACV,uBAAuB,EAGxB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EAIlB,YAAY,EAIb,MAAM,YAAY,CAAC;AAKpB,kFAAkF;AAClF,MAAM,MAAM,iBAAiB,GAAG,kBAAkB,GAAG;IACnD,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;CAC1D,CAAC;AAEF,MAAM,WAAW,gCAAgC;IAC/C;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,kBAAkB,CAAC;CACrC;AAED;;;;;GAKG;AACH,qBAAa,+BAAgC,SAAQ,KAAK;IACxD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEb,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAMjE;AAmLD;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,SAAS,uBAAuB,EAAE,EAC7C,OAAO,GAAE,gCAAqC,GAC7C,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CA8D7C"}