@kaelio/ktx 0.5.0 → 0.7.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 (875) hide show
  1. package/assets/python/{kaelio_ktx-0.5.0-py3-none-any.whl → kaelio_ktx-0.7.0-py3-none-any.whl} +0 -0
  2. package/assets/python/manifest.json +4 -4
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/clack.d.ts +8 -0
  5. package/dist/clack.js +14 -0
  6. package/dist/connection.js +2 -9
  7. package/dist/connectors/bigquery/connector.d.ts +6 -1
  8. package/dist/connectors/bigquery/connector.js +38 -9
  9. package/dist/connectors/bigquery/dialect.d.ts +11 -9
  10. package/dist/connectors/bigquery/dialect.js +25 -45
  11. package/dist/connectors/clickhouse/connector.d.ts +5 -0
  12. package/dist/connectors/clickhouse/connector.js +36 -3
  13. package/dist/connectors/clickhouse/dialect.d.ts +11 -12
  14. package/dist/connectors/clickhouse/dialect.js +25 -100
  15. package/dist/connectors/mysql/connector.d.ts +7 -1
  16. package/dist/connectors/mysql/connector.js +67 -9
  17. package/dist/connectors/mysql/dialect.d.ts +11 -9
  18. package/dist/connectors/mysql/dialect.js +25 -43
  19. package/dist/connectors/postgres/connector.d.ts +6 -0
  20. package/dist/connectors/postgres/connector.js +67 -12
  21. package/dist/connectors/postgres/dialect.d.ts +11 -9
  22. package/dist/connectors/postgres/dialect.js +26 -35
  23. package/dist/connectors/snowflake/connector.d.ts +8 -3
  24. package/dist/connectors/snowflake/connector.js +39 -20
  25. package/dist/connectors/snowflake/dialect.d.ts +11 -9
  26. package/dist/connectors/snowflake/dialect.js +25 -24
  27. package/dist/connectors/sqlite/connector.d.ts +3 -1
  28. package/dist/connectors/sqlite/connector.js +23 -3
  29. package/dist/connectors/sqlite/dialect.d.ts +11 -9
  30. package/dist/connectors/sqlite/dialect.js +25 -29
  31. package/dist/connectors/sqlserver/connector.d.ts +6 -0
  32. package/dist/connectors/sqlserver/connector.js +56 -9
  33. package/dist/connectors/sqlserver/dialect.d.ts +11 -10
  34. package/dist/connectors/sqlserver/dialect.js +24 -40
  35. package/dist/context/connections/connection-type.d.ts +1 -1
  36. package/dist/context/connections/dialect-helpers.d.ts +9 -0
  37. package/dist/context/connections/dialect-helpers.js +67 -0
  38. package/dist/context/connections/dialects.d.ts +23 -5
  39. package/dist/context/connections/dialects.js +18 -56
  40. package/dist/context/connections/drivers.d.ts +23 -0
  41. package/dist/context/connections/drivers.js +171 -0
  42. package/dist/context/connections/local-query-executor.js +25 -7
  43. package/dist/context/connections/local-warehouse-descriptor.js +0 -2
  44. package/dist/context/connections/postgres-query-executor.js +1 -1
  45. package/dist/context/connections/sqlite-query-executor.js +1 -1
  46. package/dist/context/ingest/adapters/historic-sql/chunk-unified.js +1 -1
  47. package/dist/context/ingest/adapters/historic-sql/connection-dialect.js +11 -7
  48. package/dist/context/ingest/adapters/historic-sql/evidence-tool.d.ts +1 -1
  49. package/dist/context/ingest/adapters/historic-sql/evidence-tool.js +8 -5
  50. package/dist/context/ingest/adapters/historic-sql/evidence.d.ts +4 -4
  51. package/dist/context/ingest/adapters/historic-sql/evidence.js +2 -2
  52. package/dist/context/ingest/adapters/historic-sql/projection.js +5 -2
  53. package/dist/context/ingest/adapters/live-database/daemon-introspection.js +1 -1
  54. package/dist/context/ingest/adapters/live-database/stage.d.ts +2 -0
  55. package/dist/context/ingest/adapters/live-database/stage.js +9 -0
  56. package/dist/context/ingest/adapters/looker/mapping.d.ts +0 -3
  57. package/dist/context/ingest/adapters/looker/mapping.js +0 -3
  58. package/dist/context/ingest/adapters/looker/types.d.ts +1 -1
  59. package/dist/context/ingest/historic-sql-probes/bigquery-runner.d.ts +34 -0
  60. package/dist/context/ingest/historic-sql-probes/bigquery-runner.js +99 -0
  61. package/dist/context/ingest/historic-sql-probes/postgres-runner.d.ts +26 -0
  62. package/dist/context/ingest/historic-sql-probes/postgres-runner.js +76 -0
  63. package/dist/context/ingest/historic-sql-probes/snowflake-runner.d.ts +29 -0
  64. package/dist/context/ingest/historic-sql-probes/snowflake-runner.js +62 -0
  65. package/dist/context/ingest/historic-sql-probes.d.ts +46 -0
  66. package/dist/context/ingest/historic-sql-probes.js +62 -0
  67. package/dist/context/ingest/local-adapters.js +0 -1
  68. package/dist/context/ingest/local-ingest.js +1 -1
  69. package/dist/context/llm/claude-code-runtime.js +16 -1
  70. package/dist/context/mcp/context-tools.js +11 -48
  71. package/dist/context/mcp/local-project-ports.js +0 -3
  72. package/dist/context/project/config.d.ts +0 -8
  73. package/dist/context/project/driver-schemas.d.ts +0 -4
  74. package/dist/context/project/driver-schemas.js +0 -2
  75. package/dist/context/scan/constraint-discovery.d.ts +19 -0
  76. package/dist/context/scan/constraint-discovery.js +23 -0
  77. package/dist/context/scan/enabled-tables.d.ts +4 -5
  78. package/dist/context/scan/enabled-tables.js +4 -18
  79. package/dist/context/scan/entity-details.js +14 -44
  80. package/dist/context/scan/local-enrichment.js +13 -1
  81. package/dist/context/scan/local-scan.js +5 -4
  82. package/dist/context/scan/local-structural-artifacts.js +51 -0
  83. package/dist/context/scan/relationship-benchmarks.js +9 -6
  84. package/dist/context/scan/relationship-composite-candidates.d.ts +3 -2
  85. package/dist/context/scan/relationship-composite-candidates.js +21 -33
  86. package/dist/context/scan/relationship-discovery.d.ts +3 -2
  87. package/dist/context/scan/relationship-discovery.js +4 -4
  88. package/dist/context/scan/relationship-profiling.d.ts +2 -3
  89. package/dist/context/scan/relationship-profiling.js +25 -94
  90. package/dist/context/scan/relationship-validation.d.ts +3 -2
  91. package/dist/context/scan/relationship-validation.js +12 -22
  92. package/dist/context/scan/table-ref.d.ts +1 -2
  93. package/dist/context/scan/table-ref.js +3 -4
  94. package/dist/context/scan/types.d.ts +6 -2
  95. package/dist/context/scan/warehouse-catalog.js +31 -48
  96. package/dist/context/sl/local-query.js +0 -3
  97. package/dist/context/sl/local-sl.js +0 -13
  98. package/dist/context/sl/semantic-layer.service.js +1 -4
  99. package/dist/context/tools/context-candidate-write.tool.d.ts +2 -2
  100. package/dist/context-build-view.js +1 -1
  101. package/dist/database-tree-picker.js +14 -7
  102. package/dist/error-message.d.ts +1 -0
  103. package/dist/error-message.js +29 -0
  104. package/dist/ingest-depth.js +0 -1
  105. package/dist/ingest.js +2 -2
  106. package/dist/llm/embedding-health.js +2 -2
  107. package/dist/local-scan-connectors.js +13 -56
  108. package/dist/managed-local-embeddings.js +2 -1
  109. package/dist/managed-python-daemon.d.ts +5 -0
  110. package/dist/managed-python-daemon.js +29 -9
  111. package/dist/managed-python-http.js +2 -1
  112. package/dist/public-ingest.js +1 -6
  113. package/dist/runtime-requirements.js +2 -2
  114. package/dist/setup-agents.d.ts +1 -1
  115. package/dist/setup-agents.js +16 -74
  116. package/dist/setup-context.js +2 -1
  117. package/dist/setup-databases.d.ts +3 -13
  118. package/dist/setup-databases.js +141 -313
  119. package/dist/setup-embeddings.js +10 -2
  120. package/dist/setup-project.d.ts +0 -8
  121. package/dist/setup-project.js +3 -27
  122. package/dist/setup-runtime.js +2 -1
  123. package/dist/setup-sources.js +2 -1
  124. package/dist/setup.js +11 -18
  125. package/dist/skills/historic_sql_patterns/SKILL.md +1 -3
  126. package/dist/skills/historic_sql_table_digest/SKILL.md +0 -1
  127. package/dist/skills/sl/SKILL.md +2 -2
  128. package/dist/sql.js +0 -4
  129. package/dist/status-project.d.ts +3 -18
  130. package/dist/status-project.js +42 -216
  131. package/dist/telemetry/events.d.ts +1 -1
  132. package/dist/telemetry/index.js +8 -3
  133. package/dist/tree-picker-state.d.ts +2 -2
  134. package/dist/tree-picker-state.js +29 -13
  135. package/dist/tree-picker-tui.d.ts +3 -1
  136. package/dist/tree-picker-tui.js +20 -32
  137. package/package.json +6 -6
  138. package/dist/admin-reindex.test.d.ts +0 -1
  139. package/dist/admin-reindex.test.js +0 -119
  140. package/dist/admin.test.d.ts +0 -1
  141. package/dist/admin.test.js +0 -201
  142. package/dist/cli-program-telemetry.test.d.ts +0 -1
  143. package/dist/cli-program-telemetry.test.js +0 -89
  144. package/dist/cli-program.test.d.ts +0 -1
  145. package/dist/cli-program.test.js +0 -71
  146. package/dist/command-tree.test.d.ts +0 -1
  147. package/dist/command-tree.test.js +0 -126
  148. package/dist/commands/mcp-commands.test.d.ts +0 -1
  149. package/dist/commands/mcp-commands.test.js +0 -111
  150. package/dist/commands/sql-commands.test.d.ts +0 -1
  151. package/dist/commands/sql-commands.test.js +0 -68
  152. package/dist/connection.test.d.ts +0 -1
  153. package/dist/connection.test.js +0 -426
  154. package/dist/connectors/bigquery/connector.test.d.ts +0 -1
  155. package/dist/connectors/bigquery/connector.test.js +0 -363
  156. package/dist/connectors/bigquery/dialect.test.d.ts +0 -1
  157. package/dist/connectors/bigquery/dialect.test.js +0 -36
  158. package/dist/connectors/clickhouse/connector.test.d.ts +0 -1
  159. package/dist/connectors/clickhouse/connector.test.js +0 -342
  160. package/dist/connectors/clickhouse/dialect.test.d.ts +0 -1
  161. package/dist/connectors/clickhouse/dialect.test.js +0 -36
  162. package/dist/connectors/mysql/connector.test.d.ts +0 -1
  163. package/dist/connectors/mysql/connector.test.js +0 -365
  164. package/dist/connectors/mysql/dialect.test.d.ts +0 -1
  165. package/dist/connectors/mysql/dialect.test.js +0 -36
  166. package/dist/connectors/postgres/connector.test.d.ts +0 -1
  167. package/dist/connectors/postgres/connector.test.js +0 -391
  168. package/dist/connectors/postgres/dialect.test.d.ts +0 -1
  169. package/dist/connectors/postgres/dialect.test.js +0 -37
  170. package/dist/connectors/postgres/historic-sql-query-client.test.d.ts +0 -1
  171. package/dist/connectors/postgres/historic-sql-query-client.test.js +0 -45
  172. package/dist/connectors/snowflake/connector.test.d.ts +0 -1
  173. package/dist/connectors/snowflake/connector.test.js +0 -462
  174. package/dist/connectors/snowflake/dialect.test.d.ts +0 -1
  175. package/dist/connectors/snowflake/dialect.test.js +0 -34
  176. package/dist/connectors/snowflake/identifiers.test.d.ts +0 -1
  177. package/dist/connectors/snowflake/identifiers.test.js +0 -12
  178. package/dist/connectors/snowflake/sdk-logger.test.d.ts +0 -1
  179. package/dist/connectors/snowflake/sdk-logger.test.js +0 -47
  180. package/dist/connectors/sqlite/connector.test.d.ts +0 -1
  181. package/dist/connectors/sqlite/connector.test.js +0 -207
  182. package/dist/connectors/sqlite/dialect.test.d.ts +0 -1
  183. package/dist/connectors/sqlite/dialect.test.js +0 -23
  184. package/dist/connectors/sqlserver/connector.test.d.ts +0 -1
  185. package/dist/connectors/sqlserver/connector.test.js +0 -313
  186. package/dist/connectors/sqlserver/dialect.test.d.ts +0 -1
  187. package/dist/connectors/sqlserver/dialect.test.js +0 -36
  188. package/dist/context/connections/bigquery-identifiers.test.d.ts +0 -1
  189. package/dist/context/connections/bigquery-identifiers.test.js +0 -13
  190. package/dist/context/connections/dialects.test.d.ts +0 -1
  191. package/dist/context/connections/dialects.test.js +0 -24
  192. package/dist/context/connections/local-query-executor.test.d.ts +0 -1
  193. package/dist/context/connections/local-query-executor.test.js +0 -48
  194. package/dist/context/connections/local-warehouse-descriptor.test.d.ts +0 -1
  195. package/dist/context/connections/local-warehouse-descriptor.test.js +0 -53
  196. package/dist/context/connections/notion-config.test.d.ts +0 -1
  197. package/dist/context/connections/notion-config.test.js +0 -121
  198. package/dist/context/connections/postgres-query-executor.test.d.ts +0 -1
  199. package/dist/context/connections/postgres-query-executor.test.js +0 -91
  200. package/dist/context/connections/read-only-sql.test.d.ts +0 -1
  201. package/dist/context/connections/read-only-sql.test.js +0 -20
  202. package/dist/context/connections/sqlite-query-executor.test.d.ts +0 -1
  203. package/dist/context/connections/sqlite-query-executor.test.js +0 -113
  204. package/dist/context/core/config-reference.test.d.ts +0 -1
  205. package/dist/context/core/config-reference.test.js +0 -27
  206. package/dist/context/core/git.service.assert-worktree-clean.test.d.ts +0 -1
  207. package/dist/context/core/git.service.assert-worktree-clean.test.js +0 -62
  208. package/dist/context/core/git.service.delete-directories.test.d.ts +0 -1
  209. package/dist/context/core/git.service.delete-directories.test.js +0 -61
  210. package/dist/context/core/git.service.patch.test.d.ts +0 -1
  211. package/dist/context/core/git.service.patch.test.js +0 -40
  212. package/dist/context/core/git.service.reset-hard.test.d.ts +0 -1
  213. package/dist/context/core/git.service.reset-hard.test.js +0 -47
  214. package/dist/context/core/git.service.test.d.ts +0 -1
  215. package/dist/context/core/git.service.test.js +0 -357
  216. package/dist/context/core/session-worktree.service.test.d.ts +0 -1
  217. package/dist/context/core/session-worktree.service.test.js +0 -97
  218. package/dist/context/daemon/semantic-layer-compute.test.d.ts +0 -1
  219. package/dist/context/daemon/semantic-layer-compute.test.js +0 -305
  220. package/dist/context/index-sync/reindex.test.d.ts +0 -1
  221. package/dist/context/index-sync/reindex.test.js +0 -139
  222. package/dist/context/ingest/action-identity.test.d.ts +0 -1
  223. package/dist/context/ingest/action-identity.test.js +0 -19
  224. package/dist/context/ingest/adapters/dbt/chunk.test.d.ts +0 -1
  225. package/dist/context/ingest/adapters/dbt/chunk.test.js +0 -30
  226. package/dist/context/ingest/adapters/dbt/dbt.adapter.test.d.ts +0 -1
  227. package/dist/context/ingest/adapters/dbt/dbt.adapter.test.js +0 -43
  228. package/dist/context/ingest/adapters/dbt/fetch.test.d.ts +0 -1
  229. package/dist/context/ingest/adapters/dbt/fetch.test.js +0 -30
  230. package/dist/context/ingest/adapters/dbt/parse.test.d.ts +0 -1
  231. package/dist/context/ingest/adapters/dbt/parse.test.js +0 -7
  232. package/dist/context/ingest/adapters/dbt-descriptions/parse-schema.test.d.ts +0 -1
  233. package/dist/context/ingest/adapters/dbt-descriptions/parse-schema.test.js +0 -195
  234. package/dist/context/ingest/adapters/historic-sql/bigquery-query-history-reader.test.d.ts +0 -1
  235. package/dist/context/ingest/adapters/historic-sql/bigquery-query-history-reader.test.js +0 -121
  236. package/dist/context/ingest/adapters/historic-sql/buckets.test.d.ts +0 -1
  237. package/dist/context/ingest/adapters/historic-sql/buckets.test.js +0 -49
  238. package/dist/context/ingest/adapters/historic-sql/chunk-unified.test.d.ts +0 -1
  239. package/dist/context/ingest/adapters/historic-sql/chunk-unified.test.js +0 -160
  240. package/dist/context/ingest/adapters/historic-sql/detect.test.d.ts +0 -1
  241. package/dist/context/ingest/adapters/historic-sql/detect.test.js +0 -48
  242. package/dist/context/ingest/adapters/historic-sql/evidence-tool.test.d.ts +0 -1
  243. package/dist/context/ingest/adapters/historic-sql/evidence-tool.test.js +0 -67
  244. package/dist/context/ingest/adapters/historic-sql/evidence.test.d.ts +0 -1
  245. package/dist/context/ingest/adapters/historic-sql/evidence.test.js +0 -43
  246. package/dist/context/ingest/adapters/historic-sql/historic-sql.adapter.test.d.ts +0 -1
  247. package/dist/context/ingest/adapters/historic-sql/historic-sql.adapter.test.js +0 -98
  248. package/dist/context/ingest/adapters/historic-sql/local-ingest-acceptance.test.d.ts +0 -1
  249. package/dist/context/ingest/adapters/historic-sql/local-ingest-acceptance.test.js +0 -235
  250. package/dist/context/ingest/adapters/historic-sql/pattern-inputs.test.d.ts +0 -1
  251. package/dist/context/ingest/adapters/historic-sql/pattern-inputs.test.js +0 -68
  252. package/dist/context/ingest/adapters/historic-sql/postgres-pgss-reader.test.d.ts +0 -1
  253. package/dist/context/ingest/adapters/historic-sql/postgres-pgss-reader.test.js +0 -205
  254. package/dist/context/ingest/adapters/historic-sql/projection.test.d.ts +0 -1
  255. package/dist/context/ingest/adapters/historic-sql/projection.test.js +0 -392
  256. package/dist/context/ingest/adapters/historic-sql/redaction.test.d.ts +0 -1
  257. package/dist/context/ingest/adapters/historic-sql/redaction.test.js +0 -22
  258. package/dist/context/ingest/adapters/historic-sql/skill-schemas.test.d.ts +0 -1
  259. package/dist/context/ingest/adapters/historic-sql/skill-schemas.test.js +0 -62
  260. package/dist/context/ingest/adapters/historic-sql/snowflake-query-history-reader.test.d.ts +0 -1
  261. package/dist/context/ingest/adapters/historic-sql/snowflake-query-history-reader.test.js +0 -117
  262. package/dist/context/ingest/adapters/historic-sql/stage-unified.test.d.ts +0 -1
  263. package/dist/context/ingest/adapters/historic-sql/stage-unified.test.js +0 -405
  264. package/dist/context/ingest/adapters/historic-sql/types.test.d.ts +0 -1
  265. package/dist/context/ingest/adapters/historic-sql/types.test.js +0 -87
  266. package/dist/context/ingest/adapters/live-database/chunk.test.d.ts +0 -1
  267. package/dist/context/ingest/adapters/live-database/chunk.test.js +0 -95
  268. package/dist/context/ingest/adapters/live-database/daemon-introspection.test.d.ts +0 -1
  269. package/dist/context/ingest/adapters/live-database/daemon-introspection.test.js +0 -241
  270. package/dist/context/ingest/adapters/live-database/live-database.adapter.test.d.ts +0 -1
  271. package/dist/context/ingest/adapters/live-database/live-database.adapter.test.js +0 -105
  272. package/dist/context/ingest/adapters/live-database/manifest.test.d.ts +0 -1
  273. package/dist/context/ingest/adapters/live-database/manifest.test.js +0 -291
  274. package/dist/context/ingest/adapters/live-database/stage.test.d.ts +0 -1
  275. package/dist/context/ingest/adapters/live-database/stage.test.js +0 -133
  276. package/dist/context/ingest/adapters/looker/chunk.test.d.ts +0 -1
  277. package/dist/context/ingest/adapters/looker/chunk.test.js +0 -142
  278. package/dist/context/ingest/adapters/looker/client-boundary.test.d.ts +0 -1
  279. package/dist/context/ingest/adapters/looker/client-boundary.test.js +0 -12
  280. package/dist/context/ingest/adapters/looker/client.test.d.ts +0 -1
  281. package/dist/context/ingest/adapters/looker/client.test.js +0 -407
  282. package/dist/context/ingest/adapters/looker/daemon-table-identifier-parser.test.d.ts +0 -1
  283. package/dist/context/ingest/adapters/looker/daemon-table-identifier-parser.test.js +0 -40
  284. package/dist/context/ingest/adapters/looker/detect.test.d.ts +0 -1
  285. package/dist/context/ingest/adapters/looker/detect.test.js +0 -39
  286. package/dist/context/ingest/adapters/looker/evidence-documents.test.d.ts +0 -1
  287. package/dist/context/ingest/adapters/looker/evidence-documents.test.js +0 -178
  288. package/dist/context/ingest/adapters/looker/factory.test.d.ts +0 -1
  289. package/dist/context/ingest/adapters/looker/factory.test.js +0 -55
  290. package/dist/context/ingest/adapters/looker/fetch-report.test.d.ts +0 -1
  291. package/dist/context/ingest/adapters/looker/fetch-report.test.js +0 -71
  292. package/dist/context/ingest/adapters/looker/fetch.test.d.ts +0 -1
  293. package/dist/context/ingest/adapters/looker/fetch.test.js +0 -592
  294. package/dist/context/ingest/adapters/looker/local-runtime-store.test.d.ts +0 -1
  295. package/dist/context/ingest/adapters/looker/local-runtime-store.test.js +0 -106
  296. package/dist/context/ingest/adapters/looker/looker.adapter.test.d.ts +0 -1
  297. package/dist/context/ingest/adapters/looker/looker.adapter.test.js +0 -99
  298. package/dist/context/ingest/adapters/looker/mapping.test.d.ts +0 -1
  299. package/dist/context/ingest/adapters/looker/mapping.test.js +0 -334
  300. package/dist/context/ingest/adapters/looker/reconcile.test.d.ts +0 -1
  301. package/dist/context/ingest/adapters/looker/reconcile.test.js +0 -12
  302. package/dist/context/ingest/adapters/looker/scope.test.d.ts +0 -1
  303. package/dist/context/ingest/adapters/looker/scope.test.js +0 -84
  304. package/dist/context/ingest/adapters/looker/target-connections.test.d.ts +0 -1
  305. package/dist/context/ingest/adapters/looker/target-connections.test.js +0 -71
  306. package/dist/context/ingest/adapters/looker/tools/looker-query-to-sl.tool.test.d.ts +0 -1
  307. package/dist/context/ingest/adapters/looker/tools/looker-query-to-sl.tool.test.js +0 -211
  308. package/dist/context/ingest/adapters/looker/types.test.d.ts +0 -1
  309. package/dist/context/ingest/adapters/looker/types.test.js +0 -261
  310. package/dist/context/ingest/adapters/lookml/chunk.test.d.ts +0 -1
  311. package/dist/context/ingest/adapters/lookml/chunk.test.js +0 -213
  312. package/dist/context/ingest/adapters/lookml/detect.test.d.ts +0 -1
  313. package/dist/context/ingest/adapters/lookml/detect.test.js +0 -37
  314. package/dist/context/ingest/adapters/lookml/fetch-report.test.d.ts +0 -1
  315. package/dist/context/ingest/adapters/lookml/fetch-report.test.js +0 -82
  316. package/dist/context/ingest/adapters/lookml/fetch.test.d.ts +0 -1
  317. package/dist/context/ingest/adapters/lookml/fetch.test.js +0 -121
  318. package/dist/context/ingest/adapters/lookml/graph.test.d.ts +0 -1
  319. package/dist/context/ingest/adapters/lookml/graph.test.js +0 -105
  320. package/dist/context/ingest/adapters/lookml/lookml.adapter.test.d.ts +0 -1
  321. package/dist/context/ingest/adapters/lookml/lookml.adapter.test.js +0 -49
  322. package/dist/context/ingest/adapters/lookml/parse.test.d.ts +0 -1
  323. package/dist/context/ingest/adapters/lookml/parse.test.js +0 -118
  324. package/dist/context/ingest/adapters/lookml/pull-config.test.d.ts +0 -1
  325. package/dist/context/ingest/adapters/lookml/pull-config.test.js +0 -128
  326. package/dist/context/ingest/adapters/metabase/card-references.test.d.ts +0 -1
  327. package/dist/context/ingest/adapters/metabase/card-references.test.js +0 -36
  328. package/dist/context/ingest/adapters/metabase/chunk.test.d.ts +0 -1
  329. package/dist/context/ingest/adapters/metabase/chunk.test.js +0 -299
  330. package/dist/context/ingest/adapters/metabase/client-boundary.test.d.ts +0 -1
  331. package/dist/context/ingest/adapters/metabase/client-boundary.test.js +0 -38
  332. package/dist/context/ingest/adapters/metabase/client-port.test.d.ts +0 -1
  333. package/dist/context/ingest/adapters/metabase/client-port.test.js +0 -86
  334. package/dist/context/ingest/adapters/metabase/client.test.d.ts +0 -1
  335. package/dist/context/ingest/adapters/metabase/client.test.js +0 -377
  336. package/dist/context/ingest/adapters/metabase/detect.test.d.ts +0 -1
  337. package/dist/context/ingest/adapters/metabase/detect.test.js +0 -42
  338. package/dist/context/ingest/adapters/metabase/fanout-planner.test.d.ts +0 -1
  339. package/dist/context/ingest/adapters/metabase/fanout-planner.test.js +0 -44
  340. package/dist/context/ingest/adapters/metabase/fetch-scope.test.d.ts +0 -1
  341. package/dist/context/ingest/adapters/metabase/fetch-scope.test.js +0 -124
  342. package/dist/context/ingest/adapters/metabase/fetch.test.d.ts +0 -1
  343. package/dist/context/ingest/adapters/metabase/fetch.test.js +0 -557
  344. package/dist/context/ingest/adapters/metabase/local-metabase.adapter.test.d.ts +0 -1
  345. package/dist/context/ingest/adapters/metabase/local-metabase.adapter.test.js +0 -56
  346. package/dist/context/ingest/adapters/metabase/local-source-state-store.test.d.ts +0 -1
  347. package/dist/context/ingest/adapters/metabase/local-source-state-store.test.js +0 -99
  348. package/dist/context/ingest/adapters/metabase/mapping.test.d.ts +0 -1
  349. package/dist/context/ingest/adapters/metabase/mapping.test.js +0 -215
  350. package/dist/context/ingest/adapters/metabase/metabase.adapter.test.d.ts +0 -1
  351. package/dist/context/ingest/adapters/metabase/metabase.adapter.test.js +0 -129
  352. package/dist/context/ingest/adapters/metabase/serialize-card.test.d.ts +0 -1
  353. package/dist/context/ingest/adapters/metabase/serialize-card.test.js +0 -205
  354. package/dist/context/ingest/adapters/metabase/types.test.d.ts +0 -1
  355. package/dist/context/ingest/adapters/metabase/types.test.js +0 -75
  356. package/dist/context/ingest/adapters/metricflow/chunk.test.d.ts +0 -1
  357. package/dist/context/ingest/adapters/metricflow/chunk.test.js +0 -114
  358. package/dist/context/ingest/adapters/metricflow/deep-parse.test.d.ts +0 -1
  359. package/dist/context/ingest/adapters/metricflow/deep-parse.test.js +0 -1139
  360. package/dist/context/ingest/adapters/metricflow/detect.test.d.ts +0 -1
  361. package/dist/context/ingest/adapters/metricflow/detect.test.js +0 -43
  362. package/dist/context/ingest/adapters/metricflow/fetch.test.d.ts +0 -1
  363. package/dist/context/ingest/adapters/metricflow/fetch.test.js +0 -97
  364. package/dist/context/ingest/adapters/metricflow/graph.test.d.ts +0 -1
  365. package/dist/context/ingest/adapters/metricflow/graph.test.js +0 -245
  366. package/dist/context/ingest/adapters/metricflow/import-semantic-models.test.d.ts +0 -1
  367. package/dist/context/ingest/adapters/metricflow/import-semantic-models.test.js +0 -318
  368. package/dist/context/ingest/adapters/metricflow/metricflow.adapter.test.d.ts +0 -1
  369. package/dist/context/ingest/adapters/metricflow/metricflow.adapter.test.js +0 -212
  370. package/dist/context/ingest/adapters/metricflow/parse.test.d.ts +0 -1
  371. package/dist/context/ingest/adapters/metricflow/parse.test.js +0 -171
  372. package/dist/context/ingest/adapters/metricflow/pull-config.test.d.ts +0 -1
  373. package/dist/context/ingest/adapters/metricflow/pull-config.test.js +0 -57
  374. package/dist/context/ingest/adapters/metricflow/semantic-models.test.d.ts +0 -1
  375. package/dist/context/ingest/adapters/metricflow/semantic-models.test.js +0 -204
  376. package/dist/context/ingest/adapters/notion/cluster.test.d.ts +0 -1
  377. package/dist/context/ingest/adapters/notion/cluster.test.js +0 -123
  378. package/dist/context/ingest/adapters/notion/fetch.test.d.ts +0 -1
  379. package/dist/context/ingest/adapters/notion/fetch.test.js +0 -358
  380. package/dist/context/ingest/adapters/notion/local-state-store.test.d.ts +0 -1
  381. package/dist/context/ingest/adapters/notion/local-state-store.test.js +0 -29
  382. package/dist/context/ingest/adapters/notion/normalize.test.d.ts +0 -1
  383. package/dist/context/ingest/adapters/notion/normalize.test.js +0 -64
  384. package/dist/context/ingest/adapters/notion/notion-client.test.d.ts +0 -1
  385. package/dist/context/ingest/adapters/notion/notion-client.test.js +0 -49
  386. package/dist/context/ingest/adapters/notion/notion.adapter.test.d.ts +0 -1
  387. package/dist/context/ingest/adapters/notion/notion.adapter.test.js +0 -315
  388. package/dist/context/ingest/artifact-gates.test.d.ts +0 -1
  389. package/dist/context/ingest/artifact-gates.test.js +0 -167
  390. package/dist/context/ingest/canonical-pins.test.d.ts +0 -1
  391. package/dist/context/ingest/canonical-pins.test.js +0 -66
  392. package/dist/context/ingest/clustering/kmeans.test.d.ts +0 -1
  393. package/dist/context/ingest/clustering/kmeans.test.js +0 -61
  394. package/dist/context/ingest/context-candidates/candidate-dedup.service.test.d.ts +0 -1
  395. package/dist/context/ingest/context-candidates/candidate-dedup.service.test.js +0 -216
  396. package/dist/context/ingest/context-candidates/context-candidate-carryforward.service.test.d.ts +0 -1
  397. package/dist/context/ingest/context-candidates/context-candidate-carryforward.service.test.js +0 -161
  398. package/dist/context/ingest/context-candidates/curator-pagination.service.test.d.ts +0 -1
  399. package/dist/context/ingest/context-candidates/curator-pagination.service.test.js +0 -168
  400. package/dist/context/ingest/context-candidates/embedding-text.test.d.ts +0 -1
  401. package/dist/context/ingest/context-candidates/embedding-text.test.js +0 -10
  402. package/dist/context/ingest/context-candidates/store.test.d.ts +0 -1
  403. package/dist/context/ingest/context-candidates/store.test.js +0 -67
  404. package/dist/context/ingest/context-evidence/context-evidence-index.service.test.d.ts +0 -1
  405. package/dist/context/ingest/context-evidence/context-evidence-index.service.test.js +0 -374
  406. package/dist/context/ingest/context-evidence/sqlite-context-evidence-store.test.d.ts +0 -1
  407. package/dist/context/ingest/context-evidence/sqlite-context-evidence-store.test.js +0 -416
  408. package/dist/context/ingest/context-evidence/store.test.d.ts +0 -1
  409. package/dist/context/ingest/context-evidence/store.test.js +0 -55
  410. package/dist/context/ingest/dbt-shared/project-vars.test.d.ts +0 -1
  411. package/dist/context/ingest/dbt-shared/project-vars.test.js +0 -90
  412. package/dist/context/ingest/dbt-shared/schema-files.test.d.ts +0 -1
  413. package/dist/context/ingest/dbt-shared/schema-files.test.js +0 -35
  414. package/dist/context/ingest/diff-set.service.test.d.ts +0 -1
  415. package/dist/context/ingest/diff-set.service.test.js +0 -132
  416. package/dist/context/ingest/final-gate-repair.test.d.ts +0 -1
  417. package/dist/context/ingest/final-gate-repair.test.js +0 -109
  418. package/dist/context/ingest/finalization-scope.test.d.ts +0 -1
  419. package/dist/context/ingest/finalization-scope.test.js +0 -114
  420. package/dist/context/ingest/ingest-bundle.runner.isolated-diff.test.d.ts +0 -1
  421. package/dist/context/ingest/ingest-bundle.runner.isolated-diff.test.js +0 -1928
  422. package/dist/context/ingest/ingest-bundle.runner.test.d.ts +0 -1
  423. package/dist/context/ingest/ingest-bundle.runner.test.js +0 -1899
  424. package/dist/context/ingest/ingest-prompts.test.d.ts +0 -1
  425. package/dist/context/ingest/ingest-prompts.test.js +0 -32
  426. package/dist/context/ingest/ingest-runtime-assets.test.d.ts +0 -1
  427. package/dist/context/ingest/ingest-runtime-assets.test.js +0 -89
  428. package/dist/context/ingest/ingest-trace.test.d.ts +0 -1
  429. package/dist/context/ingest/ingest-trace.test.js +0 -76
  430. package/dist/context/ingest/isolated-diff/git-patch.test.d.ts +0 -1
  431. package/dist/context/ingest/isolated-diff/git-patch.test.js +0 -76
  432. package/dist/context/ingest/isolated-diff/patch-integrator.test.d.ts +0 -1
  433. package/dist/context/ingest/isolated-diff/patch-integrator.test.js +0 -369
  434. package/dist/context/ingest/isolated-diff/textual-conflict-resolver.test.d.ts +0 -1
  435. package/dist/context/ingest/isolated-diff/textual-conflict-resolver.test.js +0 -101
  436. package/dist/context/ingest/isolated-diff/work-unit-executor.test.d.ts +0 -1
  437. package/dist/context/ingest/isolated-diff/work-unit-executor.test.js +0 -137
  438. package/dist/context/ingest/local-adapters.test.d.ts +0 -1
  439. package/dist/context/ingest/local-adapters.test.js +0 -612
  440. package/dist/context/ingest/local-bundle-ingest.test.d.ts +0 -1
  441. package/dist/context/ingest/local-bundle-ingest.test.js +0 -794
  442. package/dist/context/ingest/local-bundle-runtime.test.d.ts +0 -1
  443. package/dist/context/ingest/local-bundle-runtime.test.js +0 -240
  444. package/dist/context/ingest/local-embedding-provider.integration.test.d.ts +0 -1
  445. package/dist/context/ingest/local-embedding-provider.integration.test.js +0 -139
  446. package/dist/context/ingest/local-mapping-reconcile.test.d.ts +0 -1
  447. package/dist/context/ingest/local-mapping-reconcile.test.js +0 -61
  448. package/dist/context/ingest/local-metabase-ingest.test.d.ts +0 -1
  449. package/dist/context/ingest/local-metabase-ingest.test.js +0 -227
  450. package/dist/context/ingest/local-stage-ingest.test.d.ts +0 -1
  451. package/dist/context/ingest/local-stage-ingest.test.js +0 -581
  452. package/dist/context/ingest/memory-flow/acceptance-fixtures.d.ts +0 -6
  453. package/dist/context/ingest/memory-flow/acceptance-fixtures.js +0 -155
  454. package/dist/context/ingest/memory-flow/acceptance.test.d.ts +0 -1
  455. package/dist/context/ingest/memory-flow/acceptance.test.js +0 -43
  456. package/dist/context/ingest/memory-flow/events.test.d.ts +0 -1
  457. package/dist/context/ingest/memory-flow/events.test.js +0 -319
  458. package/dist/context/ingest/memory-flow/interaction.test.d.ts +0 -1
  459. package/dist/context/ingest/memory-flow/interaction.test.js +0 -264
  460. package/dist/context/ingest/memory-flow/interactive-render.test.d.ts +0 -1
  461. package/dist/context/ingest/memory-flow/interactive-render.test.js +0 -160
  462. package/dist/context/ingest/memory-flow/live-buffer.test.d.ts +0 -1
  463. package/dist/context/ingest/memory-flow/live-buffer.test.js +0 -77
  464. package/dist/context/ingest/memory-flow/render.test.d.ts +0 -1
  465. package/dist/context/ingest/memory-flow/render.test.js +0 -105
  466. package/dist/context/ingest/memory-flow/schema.test.d.ts +0 -1
  467. package/dist/context/ingest/memory-flow/schema.test.js +0 -147
  468. package/dist/context/ingest/memory-flow/summary.test.d.ts +0 -1
  469. package/dist/context/ingest/memory-flow/summary.test.js +0 -130
  470. package/dist/context/ingest/memory-flow/view-model.test.d.ts +0 -1
  471. package/dist/context/ingest/memory-flow/view-model.test.js +0 -397
  472. package/dist/context/ingest/memory-flow/visuals.test.d.ts +0 -1
  473. package/dist/context/ingest/memory-flow/visuals.test.js +0 -49
  474. package/dist/context/ingest/page-triage/page-triage.service.test.d.ts +0 -1
  475. package/dist/context/ingest/page-triage/page-triage.service.test.js +0 -311
  476. package/dist/context/ingest/raw-sources-paths.test.d.ts +0 -1
  477. package/dist/context/ingest/raw-sources-paths.test.js +0 -18
  478. package/dist/context/ingest/repo-fetch.test.d.ts +0 -1
  479. package/dist/context/ingest/repo-fetch.test.js +0 -168
  480. package/dist/context/ingest/report-snapshot.test.d.ts +0 -1
  481. package/dist/context/ingest/report-snapshot.test.js +0 -329
  482. package/dist/context/ingest/semantic-layer-target-policy.test.d.ts +0 -1
  483. package/dist/context/ingest/semantic-layer-target-policy.test.js +0 -25
  484. package/dist/context/ingest/source-adapter-registry.test.d.ts +0 -1
  485. package/dist/context/ingest/source-adapter-registry.test.js +0 -35
  486. package/dist/context/ingest/sqlite-bundle-ingest-store.test.d.ts +0 -1
  487. package/dist/context/ingest/sqlite-bundle-ingest-store.test.js +0 -517
  488. package/dist/context/ingest/sqlite-local-ingest-store.test.d.ts +0 -1
  489. package/dist/context/ingest/sqlite-local-ingest-store.test.js +0 -143
  490. package/dist/context/ingest/stages/build-reconcile-context.context-candidates.test.d.ts +0 -1
  491. package/dist/context/ingest/stages/build-reconcile-context.context-candidates.test.js +0 -102
  492. package/dist/context/ingest/stages/build-reconcile-context.test.d.ts +0 -1
  493. package/dist/context/ingest/stages/build-reconcile-context.test.js +0 -141
  494. package/dist/context/ingest/stages/build-wu-context.test.d.ts +0 -1
  495. package/dist/context/ingest/stages/build-wu-context.test.js +0 -196
  496. package/dist/context/ingest/stages/stage-1-stage-raw-files.test.d.ts +0 -1
  497. package/dist/context/ingest/stages/stage-1-stage-raw-files.test.js +0 -54
  498. package/dist/context/ingest/stages/stage-3-work-units.test.d.ts +0 -1
  499. package/dist/context/ingest/stages/stage-3-work-units.test.js +0 -175
  500. package/dist/context/ingest/stages/stage-4-reconciliation.test.d.ts +0 -1
  501. package/dist/context/ingest/stages/stage-4-reconciliation.test.js +0 -144
  502. package/dist/context/ingest/stages/validate-wu-sources.test.d.ts +0 -1
  503. package/dist/context/ingest/stages/validate-wu-sources.test.js +0 -27
  504. package/dist/context/ingest/tools/emit-reconciliation-records.tool.test.d.ts +0 -1
  505. package/dist/context/ingest/tools/emit-reconciliation-records.tool.test.js +0 -237
  506. package/dist/context/ingest/tools/eviction-list.tool.test.d.ts +0 -1
  507. package/dist/context/ingest/tools/eviction-list.tool.test.js +0 -44
  508. package/dist/context/ingest/tools/read-raw-file.tool.test.d.ts +0 -1
  509. package/dist/context/ingest/tools/read-raw-file.tool.test.js +0 -45
  510. package/dist/context/ingest/tools/read-raw-span.tool.test.d.ts +0 -1
  511. package/dist/context/ingest/tools/read-raw-span.tool.test.js +0 -34
  512. package/dist/context/ingest/tools/stage-diff.tool.test.d.ts +0 -1
  513. package/dist/context/ingest/tools/stage-diff.tool.test.js +0 -112
  514. package/dist/context/ingest/tools/stage-list.tool.test.d.ts +0 -1
  515. package/dist/context/ingest/tools/stage-list.tool.test.js +0 -58
  516. package/dist/context/ingest/tools/tool-transcript-summary.test.d.ts +0 -1
  517. package/dist/context/ingest/tools/tool-transcript-summary.test.js +0 -141
  518. package/dist/context/ingest/tools/warehouse-verification/discover-data.tool.test.d.ts +0 -1
  519. package/dist/context/ingest/tools/warehouse-verification/discover-data.tool.test.js +0 -107
  520. package/dist/context/ingest/tools/warehouse-verification/entity-details.tool.test.d.ts +0 -1
  521. package/dist/context/ingest/tools/warehouse-verification/entity-details.tool.test.js +0 -146
  522. package/dist/context/ingest/tools/warehouse-verification/sql-execution.tool.test.d.ts +0 -1
  523. package/dist/context/ingest/tools/warehouse-verification/sql-execution.tool.test.js +0 -50
  524. package/dist/context/ingest/wiki-body-refs.test.d.ts +0 -1
  525. package/dist/context/ingest/wiki-body-refs.test.js +0 -138
  526. package/dist/context/ingest/wiki-sl-ref-repair.test.d.ts +0 -1
  527. package/dist/context/ingest/wiki-sl-ref-repair.test.js +0 -81
  528. package/dist/context/llm/ai-sdk-runtime.test.d.ts +0 -1
  529. package/dist/context/llm/ai-sdk-runtime.test.js +0 -308
  530. package/dist/context/llm/claude-code-env.test.d.ts +0 -1
  531. package/dist/context/llm/claude-code-env.test.js +0 -17
  532. package/dist/context/llm/claude-code-models.test.d.ts +0 -1
  533. package/dist/context/llm/claude-code-models.test.js +0 -15
  534. package/dist/context/llm/claude-code-runtime.test.d.ts +0 -1
  535. package/dist/context/llm/claude-code-runtime.test.js +0 -434
  536. package/dist/context/llm/debug-request-recorder.test.d.ts +0 -1
  537. package/dist/context/llm/debug-request-recorder.test.js +0 -112
  538. package/dist/context/llm/embedding-port.test.d.ts +0 -1
  539. package/dist/context/llm/embedding-port.test.js +0 -34
  540. package/dist/context/llm/local-config.test.d.ts +0 -1
  541. package/dist/context/llm/local-config.test.js +0 -164
  542. package/dist/context/llm/runtime-local-config.test.d.ts +0 -1
  543. package/dist/context/llm/runtime-local-config.test.js +0 -17
  544. package/dist/context/llm/runtime-tools.test.d.ts +0 -1
  545. package/dist/context/llm/runtime-tools.test.js +0 -36
  546. package/dist/context/mcp/local-project-ports.test.d.ts +0 -1
  547. package/dist/context/mcp/local-project-ports.test.js +0 -689
  548. package/dist/context/mcp/server.test.d.ts +0 -1
  549. package/dist/context/mcp/server.test.js +0 -902
  550. package/dist/context/memory/local-memory.test.d.ts +0 -1
  551. package/dist/context/memory/local-memory.test.js +0 -173
  552. package/dist/context/memory/memory-agent.service.ingest.test.d.ts +0 -1
  553. package/dist/context/memory/memory-agent.service.ingest.test.js +0 -355
  554. package/dist/context/memory/memory-agent.service.test.d.ts +0 -1
  555. package/dist/context/memory/memory-agent.service.test.js +0 -413
  556. package/dist/context/memory/memory-runs.test.d.ts +0 -1
  557. package/dist/context/memory/memory-runs.test.js +0 -158
  558. package/dist/context/memory/memory-runtime-assets.test.d.ts +0 -1
  559. package/dist/context/memory/memory-runtime-assets.test.js +0 -162
  560. package/dist/context/project/config.test.d.ts +0 -1
  561. package/dist/context/project/config.test.js +0 -467
  562. package/dist/context/project/driver-schemas.test.d.ts +0 -1
  563. package/dist/context/project/driver-schemas.test.js +0 -125
  564. package/dist/context/project/local-git-file-store.test.d.ts +0 -1
  565. package/dist/context/project/local-git-file-store.test.js +0 -71
  566. package/dist/context/project/mappings-yaml-schema.test.d.ts +0 -1
  567. package/dist/context/project/mappings-yaml-schema.test.js +0 -79
  568. package/dist/context/project/project.test.d.ts +0 -1
  569. package/dist/context/project/project.test.js +0 -55
  570. package/dist/context/project/setup-config.test.d.ts +0 -1
  571. package/dist/context/project/setup-config.test.js +0 -38
  572. package/dist/context/prompts/prompt.service.test.d.ts +0 -1
  573. package/dist/context/prompts/prompt.service.test.js +0 -43
  574. package/dist/context/scan/credentials.test.d.ts +0 -1
  575. package/dist/context/scan/credentials.test.js +0 -162
  576. package/dist/context/scan/data-dictionary.test.d.ts +0 -1
  577. package/dist/context/scan/data-dictionary.test.js +0 -92
  578. package/dist/context/scan/description-generation.test.d.ts +0 -1
  579. package/dist/context/scan/description-generation.test.js +0 -693
  580. package/dist/context/scan/embedding-text.test.d.ts +0 -1
  581. package/dist/context/scan/embedding-text.test.js +0 -36
  582. package/dist/context/scan/enrichment-state.test.d.ts +0 -1
  583. package/dist/context/scan/enrichment-state.test.js +0 -147
  584. package/dist/context/scan/enrichment-summary.test.d.ts +0 -1
  585. package/dist/context/scan/enrichment-summary.test.js +0 -34
  586. package/dist/context/scan/enrichment-types.test.d.ts +0 -1
  587. package/dist/context/scan/enrichment-types.test.js +0 -141
  588. package/dist/context/scan/entity-details.test.d.ts +0 -1
  589. package/dist/context/scan/entity-details.test.js +0 -234
  590. package/dist/context/scan/local-enrichment-artifacts.test.d.ts +0 -1
  591. package/dist/context/scan/local-enrichment-artifacts.test.js +0 -771
  592. package/dist/context/scan/local-enrichment.test.d.ts +0 -1
  593. package/dist/context/scan/local-enrichment.test.js +0 -765
  594. package/dist/context/scan/local-scan.test.d.ts +0 -1
  595. package/dist/context/scan/local-scan.test.js +0 -1663
  596. package/dist/context/scan/local-structural-artifacts.test.d.ts +0 -1
  597. package/dist/context/scan/local-structural-artifacts.test.js +0 -144
  598. package/dist/context/scan/relationship-benchmark-report.test.d.ts +0 -1
  599. package/dist/context/scan/relationship-benchmark-report.test.js +0 -389
  600. package/dist/context/scan/relationship-benchmarks.test.d.ts +0 -1
  601. package/dist/context/scan/relationship-benchmarks.test.js +0 -1072
  602. package/dist/context/scan/relationship-budget.test.d.ts +0 -1
  603. package/dist/context/scan/relationship-budget.test.js +0 -71
  604. package/dist/context/scan/relationship-candidates.test.d.ts +0 -1
  605. package/dist/context/scan/relationship-candidates.test.js +0 -747
  606. package/dist/context/scan/relationship-composite-candidates.test.d.ts +0 -1
  607. package/dist/context/scan/relationship-composite-candidates.test.js +0 -69
  608. package/dist/context/scan/relationship-diagnostics.test.d.ts +0 -1
  609. package/dist/context/scan/relationship-diagnostics.test.js +0 -333
  610. package/dist/context/scan/relationship-discovery.test.d.ts +0 -1
  611. package/dist/context/scan/relationship-discovery.test.js +0 -618
  612. package/dist/context/scan/relationship-formal-metadata.test.d.ts +0 -1
  613. package/dist/context/scan/relationship-formal-metadata.test.js +0 -125
  614. package/dist/context/scan/relationship-graph-resolver.test.d.ts +0 -1
  615. package/dist/context/scan/relationship-graph-resolver.test.js +0 -604
  616. package/dist/context/scan/relationship-llm-proposal.test.d.ts +0 -1
  617. package/dist/context/scan/relationship-llm-proposal.test.js +0 -197
  618. package/dist/context/scan/relationship-locality.test.d.ts +0 -1
  619. package/dist/context/scan/relationship-locality.test.js +0 -128
  620. package/dist/context/scan/relationship-name-similarity.test.d.ts +0 -1
  621. package/dist/context/scan/relationship-name-similarity.test.js +0 -68
  622. package/dist/context/scan/relationship-profiling.test.d.ts +0 -1
  623. package/dist/context/scan/relationship-profiling.test.js +0 -392
  624. package/dist/context/scan/relationship-scoring.test.d.ts +0 -1
  625. package/dist/context/scan/relationship-scoring.test.js +0 -86
  626. package/dist/context/scan/relationship-validation.test.d.ts +0 -1
  627. package/dist/context/scan/relationship-validation.test.js +0 -455
  628. package/dist/context/scan/table-ref.test.d.ts +0 -1
  629. package/dist/context/scan/table-ref.test.js +0 -53
  630. package/dist/context/scan/type-normalization.test.d.ts +0 -1
  631. package/dist/context/scan/type-normalization.test.js +0 -21
  632. package/dist/context/scan/types.test.d.ts +0 -1
  633. package/dist/context/scan/types.test.js +0 -206
  634. package/dist/context/scan/warehouse-catalog.test.d.ts +0 -1
  635. package/dist/context/scan/warehouse-catalog.test.js +0 -158
  636. package/dist/context/search/backend-conformance.test-utils.d.ts +0 -39
  637. package/dist/context/search/backend-conformance.test-utils.js +0 -88
  638. package/dist/context/search/backend-conformance.test-utils.test.d.ts +0 -1
  639. package/dist/context/search/backend-conformance.test-utils.test.js +0 -408
  640. package/dist/context/search/discover.test.d.ts +0 -1
  641. package/dist/context/search/discover.test.js +0 -197
  642. package/dist/context/search/hybrid-search-core.test.d.ts +0 -1
  643. package/dist/context/search/hybrid-search-core.test.js +0 -113
  644. package/dist/context/search/pglite-owner-process.test.d.ts +0 -1
  645. package/dist/context/search/pglite-owner-process.test.js +0 -273
  646. package/dist/context/search/pglite-runtime-boundary.test.d.ts +0 -1
  647. package/dist/context/search/pglite-runtime-boundary.test.js +0 -40
  648. package/dist/context/search/pglite-spike.test.d.ts +0 -1
  649. package/dist/context/search/pglite-spike.test.js +0 -249
  650. package/dist/context/search/query.test.d.ts +0 -1
  651. package/dist/context/search/query.test.js +0 -23
  652. package/dist/context/search/rrf.test.d.ts +0 -1
  653. package/dist/context/search/rrf.test.js +0 -47
  654. package/dist/context/skills/skills-registry.service.test.d.ts +0 -1
  655. package/dist/context/skills/skills-registry.service.test.js +0 -161
  656. package/dist/context/sl/dictionary-search.test.d.ts +0 -1
  657. package/dist/context/sl/dictionary-search.test.js +0 -204
  658. package/dist/context/sl/local-query.test.d.ts +0 -1
  659. package/dist/context/sl/local-query.test.js +0 -283
  660. package/dist/context/sl/local-sl.test.d.ts +0 -1
  661. package/dist/context/sl/local-sl.test.js +0 -334
  662. package/dist/context/sl/pglite-sl-search-prototype.test.d.ts +0 -1
  663. package/dist/context/sl/pglite-sl-search-prototype.test.js +0 -240
  664. package/dist/context/sl/schemas.contract.test.d.ts +0 -1
  665. package/dist/context/sl/schemas.contract.test.js +0 -62
  666. package/dist/context/sl/semantic-layer.service.test.d.ts +0 -1
  667. package/dist/context/sl/semantic-layer.service.test.js +0 -1107
  668. package/dist/context/sl/sl-dictionary-profile.test.d.ts +0 -1
  669. package/dist/context/sl/sl-dictionary-profile.test.js +0 -88
  670. package/dist/context/sl/sl-search.service.test.d.ts +0 -1
  671. package/dist/context/sl/sl-search.service.test.js +0 -256
  672. package/dist/context/sl/sqlite-sl-sources-index.test.d.ts +0 -1
  673. package/dist/context/sl/sqlite-sl-sources-index.test.js +0 -175
  674. package/dist/context/sl/tools/connection-id-schema.test.d.ts +0 -1
  675. package/dist/context/sl/tools/connection-id-schema.test.js +0 -14
  676. package/dist/context/sl/tools/sl-discover.tool.test.d.ts +0 -1
  677. package/dist/context/sl/tools/sl-discover.tool.test.js +0 -72
  678. package/dist/context/sl/tools/sl-edit-source.tool.test.d.ts +0 -1
  679. package/dist/context/sl/tools/sl-edit-source.tool.test.js +0 -184
  680. package/dist/context/sl/tools/sl-read-source.tool.session.test.d.ts +0 -1
  681. package/dist/context/sl/tools/sl-read-source.tool.session.test.js +0 -55
  682. package/dist/context/sl/tools/sl-rollback.tool.test.d.ts +0 -1
  683. package/dist/context/sl/tools/sl-rollback.tool.test.js +0 -57
  684. package/dist/context/sl/tools/sl-validate.tool.test.d.ts +0 -1
  685. package/dist/context/sl/tools/sl-validate.tool.test.js +0 -54
  686. package/dist/context/sl/tools/sl-warehouse-validation.test.d.ts +0 -1
  687. package/dist/context/sl/tools/sl-warehouse-validation.test.js +0 -136
  688. package/dist/context/sl/tools/sl-write-source.tool.test.d.ts +0 -1
  689. package/dist/context/sl/tools/sl-write-source.tool.test.js +0 -307
  690. package/dist/context/sql-analysis/http-sql-analysis-port.test.d.ts +0 -1
  691. package/dist/context/sql-analysis/http-sql-analysis-port.test.js +0 -147
  692. package/dist/context/test/make-local-git-repo.d.ts +0 -10
  693. package/dist/context/test/make-local-git-repo.js +0 -34
  694. package/dist/context/tools/context-evidence-tools.test.d.ts +0 -1
  695. package/dist/context/tools/context-evidence-tools.test.js +0 -486
  696. package/dist/context/tools/touched-sl-sources.test.d.ts +0 -1
  697. package/dist/context/tools/touched-sl-sources.test.js +0 -31
  698. package/dist/context/wiki/knowledge-wiki.service.test.d.ts +0 -1
  699. package/dist/context/wiki/knowledge-wiki.service.test.js +0 -205
  700. package/dist/context/wiki/local-knowledge.test.d.ts +0 -1
  701. package/dist/context/wiki/local-knowledge.test.js +0 -270
  702. package/dist/context/wiki/sqlite-knowledge-index.test.d.ts +0 -1
  703. package/dist/context/wiki/sqlite-knowledge-index.test.js +0 -129
  704. package/dist/context/wiki/tools/wiki-list-tags.tool.test.d.ts +0 -1
  705. package/dist/context/wiki/tools/wiki-list-tags.tool.test.js +0 -35
  706. package/dist/context/wiki/tools/wiki-read.tool.test.d.ts +0 -1
  707. package/dist/context/wiki/tools/wiki-read.tool.test.js +0 -66
  708. package/dist/context/wiki/tools/wiki-remove.tool.test.d.ts +0 -1
  709. package/dist/context/wiki/tools/wiki-remove.tool.test.js +0 -95
  710. package/dist/context/wiki/tools/wiki-search.tool.test.d.ts +0 -1
  711. package/dist/context/wiki/tools/wiki-search.tool.test.js +0 -35
  712. package/dist/context/wiki/tools/wiki-write.tool.test.d.ts +0 -1
  713. package/dist/context/wiki/tools/wiki-write.tool.test.js +0 -264
  714. package/dist/context/wiki/wiki-ref-validation.test.d.ts +0 -1
  715. package/dist/context/wiki/wiki-ref-validation.test.js +0 -64
  716. package/dist/context-build-view.test.d.ts +0 -1
  717. package/dist/context-build-view.test.js +0 -942
  718. package/dist/database-tree-picker.test.d.ts +0 -1
  719. package/dist/database-tree-picker.test.js +0 -188
  720. package/dist/demo-assets.test.d.ts +0 -1
  721. package/dist/demo-assets.test.js +0 -121
  722. package/dist/demo-metrics.test.d.ts +0 -1
  723. package/dist/demo-metrics.test.js +0 -108
  724. package/dist/doctor.test.d.ts +0 -1
  725. package/dist/doctor.test.js +0 -596
  726. package/dist/embedding-resolution.test.d.ts +0 -1
  727. package/dist/embedding-resolution.test.js +0 -132
  728. package/dist/example-smoke.test.d.ts +0 -1
  729. package/dist/example-smoke.test.js +0 -83
  730. package/dist/index.test.d.ts +0 -1
  731. package/dist/index.test.js +0 -1300
  732. package/dist/ingest-query-executor.test.d.ts +0 -1
  733. package/dist/ingest-query-executor.test.js +0 -71
  734. package/dist/ingest-report-file.test.d.ts +0 -1
  735. package/dist/ingest-report-file.test.js +0 -63
  736. package/dist/ingest-viz.test.d.ts +0 -1
  737. package/dist/ingest-viz.test.js +0 -691
  738. package/dist/ingest.test-utils.d.ts +0 -126
  739. package/dist/ingest.test-utils.js +0 -629
  740. package/dist/ingest.test.d.ts +0 -1
  741. package/dist/ingest.test.js +0 -1568
  742. package/dist/io/logger.test.d.ts +0 -1
  743. package/dist/io/logger.test.js +0 -55
  744. package/dist/io/mode.test.d.ts +0 -1
  745. package/dist/io/mode.test.js +0 -48
  746. package/dist/io/print-list.test.d.ts +0 -1
  747. package/dist/io/print-list.test.js +0 -277
  748. package/dist/knowledge.test.d.ts +0 -1
  749. package/dist/knowledge.test.js +0 -198
  750. package/dist/llm/embedding-health.test.d.ts +0 -1
  751. package/dist/llm/embedding-health.test.js +0 -72
  752. package/dist/llm/embedding-provider.test.d.ts +0 -1
  753. package/dist/llm/embedding-provider.test.js +0 -84
  754. package/dist/llm/message-builder.test.d.ts +0 -1
  755. package/dist/llm/message-builder.test.js +0 -127
  756. package/dist/llm/model-health.test.d.ts +0 -1
  757. package/dist/llm/model-health.test.js +0 -55
  758. package/dist/llm/model-provider.test.d.ts +0 -1
  759. package/dist/llm/model-provider.test.js +0 -246
  760. package/dist/llm/repair.test.d.ts +0 -1
  761. package/dist/llm/repair.test.js +0 -78
  762. package/dist/local-adapters.test.d.ts +0 -1
  763. package/dist/local-adapters.test.js +0 -166
  764. package/dist/local-scan-connectors.test.d.ts +0 -1
  765. package/dist/local-scan-connectors.test.js +0 -92
  766. package/dist/managed-local-embeddings.test.d.ts +0 -1
  767. package/dist/managed-local-embeddings.test.js +0 -229
  768. package/dist/managed-mcp-daemon.test.d.ts +0 -1
  769. package/dist/managed-mcp-daemon.test.js +0 -187
  770. package/dist/managed-python-command.test.d.ts +0 -1
  771. package/dist/managed-python-command.test.js +0 -262
  772. package/dist/managed-python-daemon.test.d.ts +0 -1
  773. package/dist/managed-python-daemon.test.js +0 -360
  774. package/dist/managed-python-http.test.d.ts +0 -1
  775. package/dist/managed-python-http.test.js +0 -177
  776. package/dist/managed-python-runtime.test.d.ts +0 -1
  777. package/dist/managed-python-runtime.test.js +0 -426
  778. package/dist/mcp-http-server.test.d.ts +0 -1
  779. package/dist/mcp-http-server.test.js +0 -209
  780. package/dist/mcp-server-factory.test.d.ts +0 -1
  781. package/dist/mcp-server-factory.test.js +0 -142
  782. package/dist/memory-flow-interactive.test.d.ts +0 -1
  783. package/dist/memory-flow-interactive.test.js +0 -109
  784. package/dist/memory-flow-tui.test.d.ts +0 -1
  785. package/dist/memory-flow-tui.test.js +0 -247
  786. package/dist/next-steps.test.d.ts +0 -1
  787. package/dist/next-steps.test.js +0 -77
  788. package/dist/notion-page-picker.test.d.ts +0 -1
  789. package/dist/notion-page-picker.test.js +0 -244
  790. package/dist/print-command-tree.test.d.ts +0 -1
  791. package/dist/print-command-tree.test.js +0 -37
  792. package/dist/project-dir.test.d.ts +0 -1
  793. package/dist/project-dir.test.js +0 -124
  794. package/dist/project-resolver.test.d.ts +0 -1
  795. package/dist/project-resolver.test.js +0 -49
  796. package/dist/prompt-navigation.test.d.ts +0 -1
  797. package/dist/prompt-navigation.test.js +0 -33
  798. package/dist/proxy-env.test.d.ts +0 -1
  799. package/dist/proxy-env.test.js +0 -17
  800. package/dist/public-ingest-copy.test.d.ts +0 -1
  801. package/dist/public-ingest-copy.test.js +0 -24
  802. package/dist/public-ingest.test.d.ts +0 -1
  803. package/dist/public-ingest.test.js +0 -891
  804. package/dist/runtime-requirements.test.d.ts +0 -1
  805. package/dist/runtime-requirements.test.js +0 -73
  806. package/dist/runtime.test.d.ts +0 -1
  807. package/dist/runtime.test.js +0 -381
  808. package/dist/scan.test.d.ts +0 -1
  809. package/dist/scan.test.js +0 -1123
  810. package/dist/setup-agents.test.d.ts +0 -1
  811. package/dist/setup-agents.test.js +0 -1028
  812. package/dist/setup-context.test.d.ts +0 -1
  813. package/dist/setup-context.test.js +0 -491
  814. package/dist/setup-databases.test.d.ts +0 -1
  815. package/dist/setup-databases.test.js +0 -2101
  816. package/dist/setup-demo-tour.test.d.ts +0 -1
  817. package/dist/setup-demo-tour.test.js +0 -221
  818. package/dist/setup-embeddings.test.d.ts +0 -1
  819. package/dist/setup-embeddings.test.js +0 -436
  820. package/dist/setup-interrupt.test.d.ts +0 -1
  821. package/dist/setup-interrupt.test.js +0 -77
  822. package/dist/setup-models.test.d.ts +0 -1
  823. package/dist/setup-models.test.js +0 -885
  824. package/dist/setup-project.test.d.ts +0 -1
  825. package/dist/setup-project.test.js +0 -209
  826. package/dist/setup-prompts.test.d.ts +0 -1
  827. package/dist/setup-prompts.test.js +0 -208
  828. package/dist/setup-ready-menu.test.d.ts +0 -1
  829. package/dist/setup-ready-menu.test.js +0 -44
  830. package/dist/setup-runtime.test.d.ts +0 -1
  831. package/dist/setup-runtime.test.js +0 -111
  832. package/dist/setup-secrets.test.d.ts +0 -1
  833. package/dist/setup-secrets.test.js +0 -30
  834. package/dist/setup-sources-notion.test.d.ts +0 -1
  835. package/dist/setup-sources-notion.test.js +0 -109
  836. package/dist/setup-sources.test.d.ts +0 -1
  837. package/dist/setup-sources.test.js +0 -1303
  838. package/dist/setup.test.d.ts +0 -1
  839. package/dist/setup.test.js +0 -1825
  840. package/dist/sl.test.d.ts +0 -1
  841. package/dist/sl.test.js +0 -567
  842. package/dist/source-mapping.test.d.ts +0 -1
  843. package/dist/source-mapping.test.js +0 -65
  844. package/dist/sql.test.d.ts +0 -1
  845. package/dist/sql.test.js +0 -253
  846. package/dist/standalone-smoke.test.d.ts +0 -1
  847. package/dist/standalone-smoke.test.js +0 -250
  848. package/dist/status-project.test.d.ts +0 -1
  849. package/dist/status-project.test.js +0 -502
  850. package/dist/telemetry/command-hook.test.d.ts +0 -1
  851. package/dist/telemetry/command-hook.test.js +0 -31
  852. package/dist/telemetry/demo-detect.test.d.ts +0 -1
  853. package/dist/telemetry/demo-detect.test.js +0 -22
  854. package/dist/telemetry/emitter.test.d.ts +0 -1
  855. package/dist/telemetry/emitter.test.js +0 -103
  856. package/dist/telemetry/events.snapshot.test.d.ts +0 -1
  857. package/dist/telemetry/events.snapshot.test.js +0 -135
  858. package/dist/telemetry/events.test.d.ts +0 -1
  859. package/dist/telemetry/events.test.js +0 -136
  860. package/dist/telemetry/identity.test.d.ts +0 -1
  861. package/dist/telemetry/identity.test.js +0 -148
  862. package/dist/telemetry/project-snapshot.test.d.ts +0 -1
  863. package/dist/telemetry/project-snapshot.test.js +0 -71
  864. package/dist/telemetry/schema-writer.test.d.ts +0 -1
  865. package/dist/telemetry/schema-writer.test.js +0 -23
  866. package/dist/telemetry/scrubber.test.d.ts +0 -1
  867. package/dist/telemetry/scrubber.test.js +0 -21
  868. package/dist/text-ingest.test.d.ts +0 -1
  869. package/dist/text-ingest.test.js +0 -247
  870. package/dist/tree-picker-state.test.d.ts +0 -1
  871. package/dist/tree-picker-state.test.js +0 -303
  872. package/dist/tree-picker-tui.test.d.ts +0 -1
  873. package/dist/tree-picker-tui.test.js +0 -248
  874. package/dist/viz-fallback.test.d.ts +0 -1
  875. package/dist/viz-fallback.test.js +0 -77
package/dist/clack.d.ts CHANGED
@@ -1,3 +1,11 @@
1
+ import type { KtxCliIo } from './cli-runtime.js';
2
+ export interface RailBufferedSource {
3
+ stdoutText(): string;
4
+ stderrText(): string;
5
+ }
6
+ export declare function errorMessage(error: unknown): string;
7
+ export declare function writePrefixedLines(write: (chunk: string) => void, output: string): void;
8
+ export declare function flushPrefixedBufferedCommandOutput(io: KtxCliIo, buffered: RailBufferedSource): void;
1
9
  export interface KtxCliSpinner {
2
10
  start(message: string): void;
3
11
  message(message: string): void;
package/dist/clack.js CHANGED
@@ -1,5 +1,19 @@
1
1
  import { cancel, confirm, isCancel, log, spinner } from '@clack/prompts';
2
2
  const ESC = String.fromCharCode(0x1b);
3
+ export function errorMessage(error) {
4
+ return error instanceof Error ? error.message : String(error);
5
+ }
6
+ export function writePrefixedLines(write, output) {
7
+ for (const line of output.split(/\r?\n/)) {
8
+ if (line.length > 0) {
9
+ write(`│ ${line}\n`);
10
+ }
11
+ }
12
+ }
13
+ export function flushPrefixedBufferedCommandOutput(io, buffered) {
14
+ writePrefixedLines((chunk) => io.stdout.write(chunk), buffered.stdoutText());
15
+ writePrefixedLines((chunk) => io.stderr.write(chunk), buffered.stderrText());
16
+ }
3
17
  class KtxCliPromptCancelledError extends Error {
4
18
  constructor(message = 'Operation cancelled.') {
5
19
  super(message);
@@ -4,6 +4,7 @@ import { NotionClient } from './context/ingest/adapters/notion/notion-client.js'
4
4
  import { createLocalLookerCredentialResolver } from './context/ingest/adapters/looker/local-looker.adapter.js';
5
5
  import { metabaseRuntimeConfigFromLocalConnection } from './context/ingest/adapters/metabase/local-metabase.adapter.js';
6
6
  import { testRepoConnection } from './context/ingest/repo-fetch.js';
7
+ import { getDriverRegistration } from './context/connections/drivers.js';
7
8
  import { parseNotionConnectionConfig, resolveNotionConnectionAuthToken } from './context/connections/notion-config.js';
8
9
  import { resolveKtxConfigReference } from './context/core/config-reference.js';
9
10
  import { loadKtxProject } from './context/project/project.js';
@@ -159,15 +160,7 @@ async function testConnectionByDriver(project, connectionId, deps) {
159
160
  const result = await testGitRepoConnection(project, connectionId, driver, deps.testRepoConnection ?? testRepoConnection);
160
161
  return { driver, detailKey: 'Repo', detailValue: result.repoUrl };
161
162
  }
162
- if (driver === 'sqlite' ||
163
- driver === 'sqlite3' ||
164
- driver === 'postgres' ||
165
- driver === 'postgresql' ||
166
- driver === 'mysql' ||
167
- driver === 'clickhouse' ||
168
- driver === 'sqlserver' ||
169
- driver === 'bigquery' ||
170
- driver === 'snowflake') {
163
+ if (getDriverRegistration(driver)) {
171
164
  const result = await testNativeConnection(project, connectionId, deps.createScanConnector ?? createKtxCliScanConnector);
172
165
  return { driver: result.driver, detailKey: 'Status', detailValue: 'ok' };
173
166
  }
@@ -96,6 +96,11 @@ export interface KtxBigQueryScanConnectorOptions {
96
96
  maxBytesBilled?: number | string;
97
97
  queryTimeoutMs?: number;
98
98
  }
99
+ /** @internal */
100
+ export declare function prepareBigQueryReadOnlyQuery(sql: string, params?: Record<string, unknown>): {
101
+ sql: string;
102
+ params?: Record<string, unknown>;
103
+ };
99
104
  export declare function isKtxBigQueryConnectionConfig(connection: KtxBigQueryConnectionConfig | undefined): connection is KtxBigQueryConnectionConfig;
100
105
  /** @internal */
101
106
  export declare function bigQueryConnectionConfigFromConfig(input: {
@@ -131,7 +136,7 @@ export declare class KtxBigQueryScanConnector implements KtxScanConnector {
131
136
  getTableRowCount(tableName: string, datasetId?: string): Promise<number>;
132
137
  qTableName(table: Pick<KtxTableRef, 'name'> & Partial<Pick<KtxTableRef, 'catalog' | 'db'>>): string;
133
138
  quoteIdentifier(identifier: string): string;
134
- listDatasets(): Promise<string[]>;
139
+ listSchemas(): Promise<string[]>;
135
140
  listTables(datasetIds?: string[]): Promise<KtxTableListEntry[]>;
136
141
  cleanup(): Promise<void>;
137
142
  private getClient;
@@ -1,12 +1,13 @@
1
1
  import { BigQuery } from '@google-cloud/bigquery';
2
2
  import { normalizeBigQueryProjectId, normalizeBigQueryRegion } from '../../context/connections/bigquery-identifiers.js';
3
+ import { getDialectForDriver } from '../../context/connections/dialects.js';
3
4
  import { assertReadOnlySql, limitSqlForExecution } from '../../context/connections/read-only-sql.js';
4
- import { createKtxConnectorCapabilities } from '../../context/scan/types.js';
5
+ import { tryConstraintQuery } from '../../context/scan/constraint-discovery.js';
5
6
  import { scopedTableNames } from '../../context/scan/table-ref.js';
7
+ import { createKtxConnectorCapabilities, } from '../../context/scan/types.js';
6
8
  import { readFileSync } from 'node:fs';
7
9
  import { homedir } from 'node:os';
8
10
  import { resolve } from 'node:path';
9
- import { KtxBigQueryDialect } from './dialect.js';
10
11
  class DefaultBigQueryClientFactory {
11
12
  createClient(input) {
12
13
  const client = new BigQuery(input);
@@ -79,6 +80,14 @@ function firstNumber(value) {
79
80
  const numberValue = Number(value);
80
81
  return Number.isFinite(numberValue) ? numberValue : null;
81
82
  }
83
+ function isDeniedError(error) {
84
+ if (!error || typeof error !== 'object') {
85
+ return false;
86
+ }
87
+ const candidate = error;
88
+ return (candidate.code === 403 ||
89
+ candidate.errors?.some((item) => item.reason === 'accessDenied' || item.reason === 'notFound') === true);
90
+ }
82
91
  function normalizeValue(value) {
83
92
  if (value === null || value === undefined) {
84
93
  return null;
@@ -97,6 +106,19 @@ function normalizeValue(value) {
97
106
  }
98
107
  return value;
99
108
  }
109
+ /** @internal */
110
+ export function prepareBigQueryReadOnlyQuery(sql, params) {
111
+ if (!params) {
112
+ return { sql, params: undefined };
113
+ }
114
+ let processedSql = sql;
115
+ const processedParams = {};
116
+ for (const [key, value] of Object.entries(params)) {
117
+ processedSql = processedSql.replace(new RegExp(`:${key}\\b`, 'g'), `@${key}`);
118
+ processedParams[key] = value;
119
+ }
120
+ return { sql: processedSql, params: Object.keys(processedParams).length > 0 ? processedParams : undefined };
121
+ }
100
122
  export function isKtxBigQueryConnectionConfig(connection) {
101
123
  return String(connection?.driver ?? '').toLowerCase() === 'bigquery';
102
124
  }
@@ -138,7 +160,7 @@ export class KtxBigQueryScanConnector {
138
160
  now;
139
161
  maxBytesBilled;
140
162
  queryTimeoutMs;
141
- dialect = new KtxBigQueryDialect();
163
+ dialect = getDialectForDriver('bigquery');
142
164
  client = null;
143
165
  constructor(options) {
144
166
  this.connectionId = options.connectionId;
@@ -170,11 +192,12 @@ export class KtxBigQueryScanConnector {
170
192
  this.assertConnection(input.connectionId);
171
193
  const tables = [];
172
194
  const datasetIds = this.requireDatasetIdsForScan();
195
+ const snapshotWarnings = [];
173
196
  for (const datasetId of datasetIds) {
174
197
  const scopedNames = input.tableScope
175
198
  ? scopedTableNames(input.tableScope, { catalog: this.resolved.projectId, db: datasetId })
176
199
  : null;
177
- tables.push(...(await this.introspectDataset(datasetId, scopedNames)));
200
+ tables.push(...(await this.introspectDataset(datasetId, scopedNames, snapshotWarnings)));
178
201
  }
179
202
  return {
180
203
  connectionId: this.connectionId,
@@ -188,6 +211,7 @@ export class KtxBigQueryScanConnector {
188
211
  total_columns: tables.reduce((sum, table) => sum + table.columns.length, 0),
189
212
  },
190
213
  tables,
214
+ warnings: snapshotWarnings,
191
215
  };
192
216
  }
193
217
  async sampleTable(input, _ctx) {
@@ -206,7 +230,7 @@ export class KtxBigQueryScanConnector {
206
230
  async executeReadOnly(input, _ctx) {
207
231
  this.assertConnection(input.connectionId);
208
232
  const limitedSql = limitSqlForExecution(assertReadOnlySql(input.sql), input.maxRows);
209
- const prepared = this.dialect.prepareQuery(limitedSql, input.params);
233
+ const prepared = prepareBigQueryReadOnlyQuery(limitedSql, input.params);
210
234
  const result = await this.query(prepared.sql, prepared.params);
211
235
  return { ...result, rowCount: result.rows.length };
212
236
  }
@@ -230,7 +254,7 @@ export class KtxBigQueryScanConnector {
230
254
  if (!datasetId) {
231
255
  return 0;
232
256
  }
233
- const tables = await this.introspectDataset(datasetId, null);
257
+ const tables = await this.introspectDataset(datasetId, null, []);
234
258
  return tables.find((table) => table.name === tableName)?.estimatedRows ?? 0;
235
259
  }
236
260
  qTableName(table) {
@@ -239,7 +263,7 @@ export class KtxBigQueryScanConnector {
239
263
  quoteIdentifier(identifier) {
240
264
  return this.dialect.quoteIdentifier(identifier);
241
265
  }
242
- async listDatasets() {
266
+ async listSchemas() {
243
267
  const [datasets] = await this.getClient().getDatasets();
244
268
  return datasets.map((dataset) => dataset.id).filter((id) => Boolean(id));
245
269
  }
@@ -261,6 +285,7 @@ export class KtxBigQueryScanConnector {
261
285
  ORDER BY table_schema, table_name
262
286
  `, params);
263
287
  return rows.map((row) => ({
288
+ catalog: this.resolved.projectId,
264
289
  schema: row.table_schema,
265
290
  name: row.table_name,
266
291
  kind: row.table_type === 'VIEW' || row.table_type === 'MATERIALIZED VIEW'
@@ -316,14 +341,18 @@ export class KtxBigQueryScanConnector {
316
341
  const rows = await this.queryRaw(sql);
317
342
  return firstNumber(rows[0]?.[header]);
318
343
  }
319
- async introspectDataset(datasetId, scopedNames) {
344
+ async introspectDataset(datasetId, scopedNames, snapshotWarnings) {
320
345
  if (scopedNames && scopedNames.length === 0)
321
346
  return [];
322
347
  const dataset = this.getClient().dataset(datasetId);
323
348
  const [tableRefs] = await dataset.getTables();
324
349
  const scopeSet = scopedNames ? new Set(scopedNames) : null;
325
350
  const filteredTableRefs = scopeSet ? tableRefs.filter((tableRef) => scopeSet.has(tableRef.id ?? '')) : tableRefs;
326
- const primaryKeys = await this.primaryKeys(datasetId);
351
+ const primaryKeysResult = await tryConstraintQuery({ schema: datasetId, kind: 'primary_key', isDeniedError }, () => this.primaryKeys(datasetId));
352
+ const primaryKeys = primaryKeysResult.ok ? primaryKeysResult.value : new Map();
353
+ if (!primaryKeysResult.ok) {
354
+ snapshotWarnings.push(primaryKeysResult.warning);
355
+ }
327
356
  const tables = [];
328
357
  for (const tableRef of filteredTableRefs) {
329
358
  const tableName = tableRef.id || '';
@@ -1,29 +1,31 @@
1
+ import type { KtxDialect } from '../../context/connections/dialects.js';
1
2
  import type { KtxSchemaDimensionType, KtxTableRef } from '../../context/scan/types.js';
2
3
  type BigQueryTableNameRef = Pick<KtxTableRef, 'name'> & Partial<Pick<KtxTableRef, 'catalog' | 'db'>>;
3
- export declare class KtxBigQueryDialect {
4
- readonly type = "bigquery";
4
+ /** @internal */
5
+ export declare class KtxBigQueryDialect implements KtxDialect {
6
+ readonly type: "bigquery";
5
7
  private readonly typeMappings;
6
8
  quoteIdentifier(identifier: string): string;
7
9
  formatTableName(table: BigQueryTableNameRef): string;
10
+ formatDisplayRef(table: BigQueryTableNameRef): string;
11
+ parseDisplayRef(display: string): KtxTableRef | null;
12
+ columnDisplayTablePartCount(): 1 | 2 | 3;
8
13
  mapDataType(nativeType: string): string;
9
14
  mapToDimensionType(nativeType: string): KtxSchemaDimensionType;
10
15
  generateSampleQuery(tableName: string, limit: number, columns?: string[]): string;
11
16
  generateColumnSampleQuery(tableName: string, columnName: string, limit: number): string;
12
- prepareQuery(sql: string, params?: Record<string, unknown>): {
13
- sql: string;
14
- params?: Record<string, unknown>;
15
- };
16
17
  getRandomSampleFilter(samplePct: number): string;
17
18
  getTableSampleClause(samplePct: number): string;
18
19
  getLimitOffsetClause(limit: number, offset?: number): string;
20
+ getTopClause(_limit: number): string;
19
21
  getNullCountExpression(column: string): string;
20
22
  getDistinctCountExpression(column: string): string;
23
+ textLengthExpression(columnSql: string): string;
24
+ castToText(columnSql: string): string;
25
+ getSampleValueAggregation(innerSql: string): string;
21
26
  generateCardinalitySampleQuery(tableName: string, columnName: string, sampleSize: number): string;
22
27
  generateDistinctValuesQuery(tableName: string, columnName: string, limit: number): string;
23
28
  generateColumnStatisticsQuery(_schemaName: string, _tableName: string): string | null;
24
29
  generateRandomizedCardinalitySampleQuery(tableName: string, columnName: string, sampleSize: number): string;
25
- getTimeTruncExpression(column: string, granularity: 'day' | 'week' | 'month' | 'quarter' | 'year', timezone?: string): string;
26
- getCustomTimeTruncExpression(column: string, interval: string, origin?: string, timezone?: string): string;
27
- parseIntervalToSql(interval: string): string;
28
30
  }
29
31
  export {};
@@ -1,3 +1,5 @@
1
+ import { columnDisplayPartCount, formatDialectDisplayRef, formatDialectTableName, limitOffsetClause, parseDialectDisplayRef, } from '../../context/connections/dialect-helpers.js';
2
+ /** @internal */
1
3
  export class KtxBigQueryDialect {
2
4
  type = 'bigquery';
3
5
  typeMappings = {
@@ -20,13 +22,16 @@ export class KtxBigQueryDialect {
20
22
  return `\`${identifier.replace(/`/g, '\\`')}\``;
21
23
  }
22
24
  formatTableName(table) {
23
- if (table.catalog && table.db) {
24
- return `${this.quoteIdentifier(table.catalog)}.${this.quoteIdentifier(table.db)}.${this.quoteIdentifier(table.name)}`;
25
- }
26
- if (table.db) {
27
- return `${this.quoteIdentifier(table.db)}.${this.quoteIdentifier(table.name)}`;
28
- }
29
- return this.quoteIdentifier(table.name);
25
+ return formatDialectTableName(table, this.quoteIdentifier.bind(this), 'three-part');
26
+ }
27
+ formatDisplayRef(table) {
28
+ return formatDialectDisplayRef(table, 'three-part');
29
+ }
30
+ parseDisplayRef(display) {
31
+ return parseDialectDisplayRef(display, 'three-part');
32
+ }
33
+ columnDisplayTablePartCount() {
34
+ return columnDisplayPartCount('three-part');
30
35
  }
31
36
  mapDataType(nativeType) {
32
37
  const fieldType = nativeType.toUpperCase().trim();
@@ -80,18 +85,6 @@ export class KtxBigQueryDialect {
80
85
  const quotedColumn = this.quoteIdentifier(columnName);
81
86
  return `SELECT ${quotedColumn} FROM ${tableName} WHERE ${quotedColumn} IS NOT NULL AND TRIM(CAST(${quotedColumn} AS STRING)) != '' ORDER BY RAND() LIMIT ${limit}`;
82
87
  }
83
- prepareQuery(sql, params) {
84
- if (!params) {
85
- return { sql, params: undefined };
86
- }
87
- let processedSql = sql;
88
- const processedParams = {};
89
- for (const [key, value] of Object.entries(params)) {
90
- processedSql = processedSql.replace(new RegExp(`:${key}\\b`, 'g'), `@${key}`);
91
- processedParams[key] = value;
92
- }
93
- return { sql: processedSql, params: Object.keys(processedParams).length > 0 ? processedParams : undefined };
94
- }
95
88
  getRandomSampleFilter(samplePct) {
96
89
  if (samplePct <= 0 || samplePct >= 1) {
97
90
  return '';
@@ -105,7 +98,10 @@ export class KtxBigQueryDialect {
105
98
  return `TABLESAMPLE SYSTEM (${samplePct * 100} PERCENT)`;
106
99
  }
107
100
  getLimitOffsetClause(limit, offset) {
108
- return offset !== undefined && offset > 0 ? `LIMIT ${limit} OFFSET ${offset}` : `LIMIT ${limit}`;
101
+ return limitOffsetClause(limit, offset);
102
+ }
103
+ getTopClause(_limit) {
104
+ return '';
109
105
  }
110
106
  getNullCountExpression(column) {
111
107
  return `COUNTIF(${column} IS NULL)`;
@@ -113,6 +109,15 @@ export class KtxBigQueryDialect {
113
109
  getDistinctCountExpression(column) {
114
110
  return `APPROX_COUNT_DISTINCT(${column})`;
115
111
  }
112
+ textLengthExpression(columnSql) {
113
+ return `LENGTH(CAST(${columnSql} AS STRING))`;
114
+ }
115
+ castToText(columnSql) {
116
+ return `CAST(${columnSql} AS STRING)`;
117
+ }
118
+ getSampleValueAggregation(innerSql) {
119
+ return `(SELECT STRING_AGG(CAST(value AS STRING), '\\u001F') FROM (${innerSql}) AS relationship_profile_values)`;
120
+ }
116
121
  generateCardinalitySampleQuery(tableName, columnName, sampleSize) {
117
122
  return `
118
123
  WITH sampled AS (
@@ -150,29 +155,4 @@ export class KtxBigQueryDialect {
150
155
  FROM sampled
151
156
  `;
152
157
  }
153
- getTimeTruncExpression(column, granularity, timezone) {
154
- const bigQueryGranularity = granularity.toUpperCase();
155
- if (timezone) {
156
- return `DATE_TRUNC(DATETIME(${column}, '${timezone}'), ${bigQueryGranularity})`;
157
- }
158
- return `DATE_TRUNC(${column}, ${bigQueryGranularity})`;
159
- }
160
- getCustomTimeTruncExpression(column, interval, origin, timezone) {
161
- const col = timezone ? `DATETIME(${column}, '${timezone}')` : column;
162
- const [rawAmount, rawUnit] = interval.split(' ');
163
- let diffUnit = rawUnit.toUpperCase();
164
- let amount = Number(rawAmount);
165
- let addUnit = diffUnit;
166
- if (diffUnit === 'WEEK') {
167
- diffUnit = 'DAY';
168
- amount = amount * 7;
169
- addUnit = 'DAY';
170
- }
171
- const originExpr = origin ? `TIMESTAMP '${origin}'` : `TIMESTAMP '1970-01-01'`;
172
- return `TIMESTAMP_ADD(${originExpr}, INTERVAL CAST(FLOOR(TIMESTAMP_DIFF(${col}, ${originExpr}, ${diffUnit}) / ${amount}) * ${amount} AS INT64) ${addUnit})`;
173
- }
174
- parseIntervalToSql(interval) {
175
- const [amount, unit] = interval.split(' ');
176
- return `INTERVAL ${amount} ${unit.toUpperCase()}`;
177
- }
178
158
  }
@@ -68,6 +68,11 @@ export interface KtxClickHouseColumnDistinctValuesResult {
68
68
  values: string[] | null;
69
69
  cardinality: number;
70
70
  }
71
+ /** @internal */
72
+ export declare function prepareClickHouseReadOnlyQuery(sql: string, params?: Record<string, unknown>): {
73
+ sql: string;
74
+ params?: Record<string, unknown>;
75
+ };
71
76
  export declare function isKtxClickHouseConnectionConfig(connection: KtxClickHouseConnectionConfig | undefined): connection is KtxClickHouseConnectionConfig;
72
77
  /** @internal */
73
78
  export declare function clickHouseClientConfigFromConfig(input: {
@@ -1,4 +1,5 @@
1
1
  import { createClient } from '@clickhouse/client';
2
+ import { getDialectForDriver } from '../../context/connections/dialects.js';
2
3
  import { assertReadOnlySql, limitSqlForExecution } from '../../context/connections/read-only-sql.js';
3
4
  import { createKtxConnectorCapabilities } from '../../context/scan/types.js';
4
5
  import { scopedTableNames } from '../../context/scan/table-ref.js';
@@ -6,7 +7,6 @@ import { readFileSync } from 'node:fs';
6
7
  import { Agent as HttpsAgent } from 'node:https';
7
8
  import { homedir } from 'node:os';
8
9
  import { resolve } from 'node:path';
9
- import { KtxClickHouseDialect } from './dialect.js';
10
10
  class DefaultClickHouseClientFactory {
11
11
  createClient(config) {
12
12
  return createClient(config);
@@ -62,6 +62,38 @@ function configuredClickHouseDatabases(connection, fallbackDatabase) {
62
62
  function clickHouseTableKey(database, table) {
63
63
  return `${database}.${table}`;
64
64
  }
65
+ function inferClickHouseQueryParamType(value) {
66
+ if (value === null || value === undefined) {
67
+ return 'String';
68
+ }
69
+ if (typeof value === 'boolean') {
70
+ return 'Bool';
71
+ }
72
+ if (typeof value === 'number') {
73
+ return Number.isInteger(value) ? 'Int64' : 'Float64';
74
+ }
75
+ if (value instanceof Date) {
76
+ return 'DateTime';
77
+ }
78
+ return 'String';
79
+ }
80
+ /** @internal */
81
+ export function prepareClickHouseReadOnlyQuery(sql, params) {
82
+ if (!params) {
83
+ return { sql, params: undefined };
84
+ }
85
+ let parameterizedQuery = sql;
86
+ const queryParams = {};
87
+ const sortedKeys = Object.keys(params).sort((a, b) => b.length - a.length);
88
+ for (const key of sortedKeys) {
89
+ const placeholder = `:${key}`;
90
+ if (parameterizedQuery.includes(placeholder)) {
91
+ parameterizedQuery = parameterizedQuery.replace(new RegExp(`:${key}\\b`, 'g'), `{${key}:${inferClickHouseQueryParamType(params[key])}}`);
92
+ queryParams[key] = params[key];
93
+ }
94
+ }
95
+ return { sql: parameterizedQuery, params: Object.keys(queryParams).length > 0 ? queryParams : undefined };
96
+ }
65
97
  export function isKtxClickHouseConnectionConfig(connection) {
66
98
  return String(connection?.driver ?? '').toLowerCase() === 'clickhouse';
67
99
  }
@@ -108,7 +140,7 @@ export class KtxClickHouseScanConnector {
108
140
  clientFactory;
109
141
  endpointResolver;
110
142
  now;
111
- dialect = new KtxClickHouseDialect();
143
+ dialect = getDialectForDriver('clickhouse');
112
144
  client = null;
113
145
  resolvedEndpoint = null;
114
146
  constructor(options) {
@@ -237,7 +269,7 @@ export class KtxClickHouseScanConnector {
237
269
  async executeReadOnly(input, _ctx) {
238
270
  this.assertConnection(input.connectionId);
239
271
  const limitedSql = limitSqlForExecution(assertReadOnlySql(input.sql), input.maxRows);
240
- const prepared = this.dialect.prepareQuery(limitedSql, input.params);
272
+ const prepared = prepareClickHouseReadOnlyQuery(limitedSql, input.params);
241
273
  const result = await this.query(prepared.sql, prepared.params);
242
274
  return { ...result, rowCount: result.rows.length };
243
275
  }
@@ -298,6 +330,7 @@ export class KtxClickHouseScanConnector {
298
330
  ORDER BY database, name
299
331
  `, { schemas: filterSchemas });
300
332
  return rows.map((row) => ({
333
+ catalog: null,
301
334
  schema: row.database,
302
335
  name: row.name,
303
336
  kind: row.engine === 'View' || row.engine === 'MaterializedView' ? 'view' : 'table',
@@ -1,33 +1,32 @@
1
+ import type { KtxDialect } from '../../context/connections/dialects.js';
1
2
  import type { KtxSchemaDimensionType, KtxTableRef } from '../../context/scan/types.js';
2
3
  type ClickHouseTableNameRef = Pick<KtxTableRef, 'name'> & Partial<Pick<KtxTableRef, 'catalog' | 'db'>>;
3
- export declare class KtxClickHouseDialect {
4
- readonly type = "clickhouse";
4
+ /** @internal */
5
+ export declare class KtxClickHouseDialect implements KtxDialect {
6
+ readonly type: "clickhouse";
5
7
  private readonly typeMappings;
6
8
  quoteIdentifier(identifier: string): string;
7
9
  formatTableName(table: ClickHouseTableNameRef): string;
10
+ formatDisplayRef(table: ClickHouseTableNameRef): string;
11
+ parseDisplayRef(display: string): KtxTableRef | null;
12
+ columnDisplayTablePartCount(): 1 | 2 | 3;
8
13
  mapDataType(nativeType: string): string;
9
14
  mapToDimensionType(nativeType: string): KtxSchemaDimensionType;
10
15
  generateSampleQuery(tableName: string, limit: number, columns?: string[]): string;
11
16
  generateColumnSampleQuery(tableName: string, columnName: string, limit: number): string;
12
- prepareQuery(sql: string, params?: Record<string, unknown>): {
13
- sql: string;
14
- params?: Record<string, unknown>;
15
- };
16
17
  getRandomSampleFilter(samplePct: number): string;
17
18
  getTableSampleClause(_samplePct: number): string;
18
19
  getLimitOffsetClause(limit: number, offset?: number): string;
20
+ getTopClause(_limit: number): string;
19
21
  getNullCountExpression(column: string): string;
20
22
  getDistinctCountExpression(column: string): string;
23
+ textLengthExpression(columnSql: string): string;
24
+ castToText(columnSql: string): string;
25
+ getSampleValueAggregation(innerSql: string): string;
21
26
  generateCardinalitySampleQuery(tableName: string, columnName: string, sampleSize: number): string;
22
27
  generateDistinctValuesQuery(tableName: string, columnName: string, limit: number): string;
23
28
  generateColumnStatisticsQuery(_schemaName: string, _tableName: string): string | null;
24
29
  generateRandomizedCardinalitySampleQuery(tableName: string, columnName: string, sampleSize: number): string;
25
- getTimeTruncExpression(column: string, granularity: 'day' | 'week' | 'month' | 'quarter' | 'year', timezone?: string): string;
26
- getCustomTimeTruncExpression(column: string, interval: string, origin?: string, timezone?: string): string;
27
- parseIntervalToSql(interval: string): string;
28
30
  private unwrapClickHouseType;
29
- private inferClickHouseType;
30
- private toClickHouseDateDiffUnit;
31
- private intervalToSeconds;
32
31
  }
33
32
  export {};
@@ -1,3 +1,5 @@
1
+ import { columnDisplayPartCount, formatDialectDisplayRef, formatDialectTableName, limitOffsetClause, parseDialectDisplayRef, } from '../../context/connections/dialect-helpers.js';
2
+ /** @internal */
1
3
  export class KtxClickHouseDialect {
2
4
  type = 'clickhouse';
3
5
  typeMappings = {
@@ -38,9 +40,16 @@ export class KtxClickHouseDialect {
38
40
  return `\`${identifier.replace(/`/g, '``')}\``;
39
41
  }
40
42
  formatTableName(table) {
41
- return table.db
42
- ? `${this.quoteIdentifier(table.db)}.${this.quoteIdentifier(table.name)}`
43
- : this.quoteIdentifier(table.name);
43
+ return formatDialectTableName(table, this.quoteIdentifier.bind(this), 'ansi');
44
+ }
45
+ formatDisplayRef(table) {
46
+ return formatDialectDisplayRef(table, 'ansi');
47
+ }
48
+ parseDisplayRef(display) {
49
+ return parseDialectDisplayRef(display, 'ansi');
50
+ }
51
+ columnDisplayTablePartCount() {
52
+ return columnDisplayPartCount('ansi');
44
53
  }
45
54
  mapDataType(nativeType) {
46
55
  return nativeType;
@@ -80,22 +89,6 @@ export class KtxClickHouseDialect {
80
89
  const quotedColumn = this.quoteIdentifier(columnName);
81
90
  return `SELECT ${quotedColumn} FROM ${tableName} WHERE ${quotedColumn} IS NOT NULL AND trim(toString(${quotedColumn})) != '' LIMIT ${limit}`;
82
91
  }
83
- prepareQuery(sql, params) {
84
- if (!params) {
85
- return { sql, params: undefined };
86
- }
87
- let parameterizedQuery = sql;
88
- const queryParams = {};
89
- const sortedKeys = Object.keys(params).sort((a, b) => b.length - a.length);
90
- for (const key of sortedKeys) {
91
- const placeholder = `:${key}`;
92
- if (parameterizedQuery.includes(placeholder)) {
93
- parameterizedQuery = parameterizedQuery.replace(new RegExp(`:${key}\\b`, 'g'), `{${key}:${this.inferClickHouseType(params[key])}}`);
94
- queryParams[key] = params[key];
95
- }
96
- }
97
- return { sql: parameterizedQuery, params: queryParams };
98
- }
99
92
  getRandomSampleFilter(samplePct) {
100
93
  if (samplePct <= 0 || samplePct >= 1) {
101
94
  return '';
@@ -106,7 +99,10 @@ export class KtxClickHouseDialect {
106
99
  return '';
107
100
  }
108
101
  getLimitOffsetClause(limit, offset) {
109
- return offset !== undefined && offset > 0 ? `LIMIT ${limit} OFFSET ${offset}` : `LIMIT ${limit}`;
102
+ return limitOffsetClause(limit, offset);
103
+ }
104
+ getTopClause(_limit) {
105
+ return '';
110
106
  }
111
107
  getNullCountExpression(column) {
112
108
  return `countIf(${column} IS NULL)`;
@@ -114,6 +110,15 @@ export class KtxClickHouseDialect {
114
110
  getDistinctCountExpression(column) {
115
111
  return `COUNT(DISTINCT ${column})`;
116
112
  }
113
+ textLengthExpression(columnSql) {
114
+ return `length(toString(${columnSql}))`;
115
+ }
116
+ castToText(columnSql) {
117
+ return `toString(${columnSql})`;
118
+ }
119
+ getSampleValueAggregation(innerSql) {
120
+ return `(SELECT arrayStringConcat(groupArray(toString(value)), '\\x1F') FROM (${innerSql}) AS relationship_profile_values)`;
121
+ }
117
122
  generateCardinalitySampleQuery(tableName, columnName, sampleSize) {
118
123
  return `
119
124
  SELECT COUNT(DISTINCT val) AS cardinality
@@ -149,88 +154,8 @@ export class KtxClickHouseDialect {
149
154
  )
150
155
  `;
151
156
  }
152
- getTimeTruncExpression(column, granularity, timezone) {
153
- const tz = timezone ? `, '${timezone}'` : '';
154
- switch (granularity) {
155
- case 'day':
156
- return `toStartOfDay(${column}${tz})`;
157
- case 'week':
158
- return `toStartOfWeek(${column}, 1${tz})`;
159
- case 'month':
160
- return `toStartOfMonth(${column}${tz})`;
161
- case 'quarter':
162
- return `toStartOfQuarter(${column}${tz})`;
163
- case 'year':
164
- return `toStartOfYear(${column}${tz})`;
165
- }
166
- }
167
- getCustomTimeTruncExpression(column, interval, origin, timezone) {
168
- const col = timezone ? `toTimezone(${column}, '${timezone}')` : column;
169
- const [rawAmount, rawUnit] = interval.split(' ');
170
- const amount = Number(rawAmount);
171
- const unit = rawUnit.toLowerCase();
172
- const originExpr = origin ? `toDateTime('${origin}')` : "toDateTime('1970-01-01')";
173
- const calendarUnit = this.toClickHouseDateDiffUnit(unit);
174
- if (calendarUnit) {
175
- return `dateAdd(${calendarUnit}, intDiv(dateDiff(${calendarUnit}, ${originExpr}, ${col}), ${amount}) * ${amount}, ${originExpr})`;
176
- }
177
- const seconds = this.intervalToSeconds(amount, unit);
178
- return `addSeconds(${originExpr}, intDiv(toUInt64(dateDiff('second', ${originExpr}, ${col})), ${seconds}) * ${seconds})`;
179
- }
180
- parseIntervalToSql(interval) {
181
- const [amount, unit] = interval.split(' ');
182
- return `INTERVAL ${amount} ${unit.toUpperCase()}`;
183
- }
184
157
  unwrapClickHouseType(value, wrapper) {
185
158
  const prefix = `${wrapper}(`;
186
159
  return value.startsWith(prefix) && value.endsWith(')') ? value.slice(prefix.length, -1) : value;
187
160
  }
188
- inferClickHouseType(value) {
189
- if (value === null || value === undefined) {
190
- return 'String';
191
- }
192
- if (typeof value === 'boolean') {
193
- return 'Bool';
194
- }
195
- if (typeof value === 'number') {
196
- return Number.isInteger(value) ? 'Int64' : 'Float64';
197
- }
198
- if (value instanceof Date) {
199
- return 'DateTime';
200
- }
201
- return 'String';
202
- }
203
- toClickHouseDateDiffUnit(unit) {
204
- if (unit === 'month' || unit === 'months') {
205
- return "'month'";
206
- }
207
- if (unit === 'quarter' || unit === 'quarters') {
208
- return "'quarter'";
209
- }
210
- if (unit === 'year' || unit === 'years') {
211
- return "'year'";
212
- }
213
- return null;
214
- }
215
- intervalToSeconds(amount, unit) {
216
- switch (unit) {
217
- case 'second':
218
- case 'seconds':
219
- return amount;
220
- case 'minute':
221
- case 'minutes':
222
- return amount * 60;
223
- case 'hour':
224
- case 'hours':
225
- return amount * 3600;
226
- case 'day':
227
- case 'days':
228
- return amount * 86400;
229
- case 'week':
230
- case 'weeks':
231
- return amount * 604800;
232
- default:
233
- return amount * 86400;
234
- }
235
- }
236
161
  }